撓撓我的腦袋。以下陳述有什麼問題?爲什麼編譯器在這種情況下無法確定操作數的類型?
var EncFunc = (encrypt ? Encryption.Encrypt : Encryption.Decrypt);
encrypt
是bool
,兩者的功能Encryption.Encrypt
和Encryption.Decrypt
具有相同類型的Func<string, string>
,但它告訴我,:無法確定條件表達式
CS0173型,因爲沒有隱式轉換'方法組'和'方法組'之間
我已經通過了this和this,但無法理解爲什麼編譯器無法確定這2個函數的類型。
N.B.我知道這可以通過明確的轉換來解決。我對理解「爲什麼」部分更感興趣。
May [this](https://msdn.microsoft.com/en-us/library/hb47kt2f.aspx)help?但我想你已經讀過了。所以我猜[這](http://stackoverflow.com/questions/2215745/conditional-operator-cannot-cast-implicitly/2215959#2215959)是可能重複的問題和答案。 – ckruczek
@ckruczek:謝謝。這是一個很好的閱讀。但它沒有解決這種情況。類型信息流出RHS,而不是流入它,因爲LHS是推斷的。 – dotNET
我認爲這個問題可以簡單地作爲,你不能這樣做「var encFunc = Encryption.Encrypt;」,但你可以做到這一點「Func encFunc = Encryption.Encrypt;」。爲什麼是這樣,不幸的是我不知道......我也想知道爲什麼它有麻煩檢測到足夠的隱式轉換爲委託。 –