首頁 >後端開發 >C++ >為什麼我無法在 C# 中將匿名方法分配給'var”變數?

為什麼我無法在 C# 中將匿名方法分配給'var”變數?

DDD
DDD原創
2024-12-29 03:53:10778瀏覽

Why Can't I Assign an Anonymous Method to a `var` Variable in C#?

為什麼匿名方法不能賦值給Var

當遇到像這樣的匿名方法時:

delegate(string value) {
    return value != "0";
}

編譯器是面臨挑戰。與類型化 lambda 表達式不同,例如:

Func comparer = delegate(string value) {
    return value != "0";
};

匿名方法不會明確指定委託類型。編譯器必須根據方法的簽章推斷該類型。但是,滿足這些條件的潛在委託類型有無限多種,且具有不同的參數和回傳值。

推斷匿名方法的類型會帶來幾個問題:

  • 缺乏一致性: 將lambda 表達式分配給var 表示對Func 的推論。類型。然而,對於匿名方法,沒有這樣的優先級,導致處理多個參數情況時不一致。
  • 歧義:在像 var x2 = y => 這樣的情況下123,編譯器無法確定參數類型。
  • 未定義的回傳類型:某些匿名方法具有未指定的回傳類型,可以是任何引用或可為 null 的值類型。
  • 不可確定的函數作用域:在var x5 = (int y) 等情況下,無法區分語句lambda 和函數=> q = y.
  • 特殊語法與限制:使用匿名方法需要delegate 關鍵字,與lambda表達式相比,加入了不必要的語法。委託形式也缺少表達式樹和訊息傳遞等功能。

因此,編譯器錯誤「無法將匿名方法指派給隱式類型的局部變數」會阻止將 var 與匿名方法一起使用。

以上是為什麼我無法在 C# 中將匿名方法分配給'var”變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn