首頁 >後端開發 >C++ >為什麼在沒有顯式類型宣告的情況下隱式類型變數('var')不能保存匿名方法?

為什麼在沒有顯式類型宣告的情況下隱式類型變數('var')不能保存匿名方法?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-31 19:25:10624瀏覽

Why Can't Implicitly Typed Variables ('var') Hold Anonymous Methods Without Explicit Type Declaration?

為什麼不能將匿名方法分配給隱式類型「Var」推斷的變數?

考慮以下程式碼:

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};

此程式碼編譯成功,因為 lambda 的推斷類型表達式是一個 Func 委託。但是,以下程式碼無法編譯:

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

在這種情況下,編譯器無法推斷 lambda 表達式的委託類型。這是因為可以推斷出無限多種可能的委託類型,而編譯器沒有足夠的上下文來決定要使用哪一種委託類型。

例如,lambda 表達式可以是 Func、謂詞 或運算。另外,lambda 表達式可以是 Expression> 型,它表示表達式樹ではなく、委託型です。

要解決此問題,請明確指定委託類型lambda 表達式:

var comparer = (Func<string, bool>)delegate(string value) {
    return value != "0";
};

透過此更改,程式碼將成功編譯,且lambda 表達式的推斷類型將為Func.

以上是為什麼在沒有顯式類型宣告的情況下隱式類型變數('var')不能保存匿名方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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