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

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

Susan Sarandon
發布: 2025-01-02 17:10:42
原創
628 人瀏覽過

Why Can't I Assign Anonymous Methods to `var` in C#?

匿名方法賦值給 var 的限制

在 C# 中,匿名方法提供了一種定義內聯函數的便捷方法。雖然這些方法可以輕鬆指派給委託類型,但嘗試將它們指派給隱式類型變數(使用 var)通常會導致編譯器錯誤。

考慮以下程式碼範例:

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};
登入後複製

此程式碼成功編譯,因為匿名方法被明確地指派給 Func代表。但是,以下程式碼會引發編譯器錯誤:

var comparer = delegate(string value) {
    return value != "0";
};
登入後複製

錯誤:

無法將匿名方法指派給隱式類型的局部變數。

發生此錯誤的原因是編譯器無法推斷匿名方法的類型。它可以表示無數種可能的委託類型,包括 Func、Predicate、Action 和無數其他類型。

此外,即使編譯器推斷出 Func作為預期的委託類型,它會與匿名方法具有不同數量的參數的情況產生不一致。例如,以下程式碼也將編譯為 Func delegate:

var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
    return false;
};
登入後複製

但是,這沒有意義,因為 Func .NET 3.5 中委託最多支援四個參數。

要解決此問題並確保匿名方法編譯為正確的委託類型,需要在賦值語句中明確指定委託類型,如第一個程式碼範例所示。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板