當我調用一個函數並用動態替換其中一個參數時,編譯器會將函數結果推斷爲動態。我不明白爲什麼會發生這種情況。帶動態功能參數的C#編譯器類型推理
例:推斷類型爲是動態的,所以這段代碼編譯,但當然在運行時失敗,RuntimeBinderException:
dynamic b = "";
var a = MethodWithoutOverloads("", b);
a.DoesNotExist();
...
public string MethodWithoutOverloads(string a, string b) { ... }
有人知道爲什麼類型推斷不是函數的返回類型?
編輯:編輯,以明確出現這種情況有沒有方法重載
這種情況發生在我有一種方法時,即沒有歧義時。 String.Format不是一個好例子,但是當沒有歧義時我調用我自己的方法時類型推斷也失敗。 – Lev
@Lev這是正確的。*技術上*編譯器或許能夠毫不含糊地將其弄清楚,但我認爲這需要更多的工作來獲得看似不大的收益。每當「動態」是表達式的一部分時,結果也將通過「動態」。如果你確定知道類型,只需使用變量類型明確而不是使用'var' – Rob
好吧,所以基本上是「我們沒有對這種情況實現類型推斷」的情況...... – Lev