有一個「值」和「不帶參數的一個返回值的函數」之間沒有自動轉換(讓我們稱之爲一個Func<T>
),也沒有在相反方向的自動轉換。
要將Func<T>
轉換爲值T
,必須在其後面放置()
。要將值轉換爲Func<T>
,您可以在其前面放置() =>
。
如果你想打電話給一些接受Func<T>
方法,你不能直接傳遞一個值,所以你必須將該值轉換成Func<T>
,要做到這一點,你可以把() =>
在它的前面。
如果你想打電話給一些接受值的方法,你不能直接傳遞一個Func<T>
,所以你必須通過把()
後到Func<T>
轉換成數值。
有些語言在這些東西之間自動轉換,但C#沒有。
在你的情況下,你有一個函數接受一個值,並且你正在試圖傳遞一個函數,即使你已經有了一個值,所以除了賦予值的功能。
int val = 5; // value
Func<int> f =() => val; // convert value to function
int val2 = f(); // convert back to value
「匿名方法」語法就是這樣做的醜陋的舊方法。你試圖做什麼有兩個問題(除了不必要的事實)。
首先,您需要通過使用new Func<int>(...)
包裝明確指定委託類型來爲編譯器提供類型提示。
其次,您需要在其後面添加()
以獲取該值。
FibonacciWithLinq.Skip(new Func<int>
(delegate()
{
return 5;
})());
但它不能夠強調 - 這是完全沒有意義的。
Skip是如何定義的? – 2009-05-25 21:27:42
它的定義在這裏:http://msdn.microsoft.com/en-us/library/bb358985.aspx它並不需要委託作爲參數,只是一個數字,所以整個問題似乎都沒有實際意義。 – 2009-05-25 21:30:24