我被這個問題搞糊塗了。傳統上,如果我寫這樣的方法:爲什麼Enumerable中的方法可能沒有方法體?
public static class MyClass
{
public static int myMethod(this int x, Func<int, bool> evaluate);
}
我會得到一個編譯錯誤,說:
'ExtentionMethods.MyClass.myMethod(INT,System.Func)' 必須聲明主體因爲它沒有標出抽象,外部或部分
這是可以理解的。但是我看到名字空間System.Linq下的Enumerable類。我發現所有的方法都沒有方法體,例如:
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
而且沒有任何編譯錯誤吧。爲什麼?
是什麼原因?
您發佈的第二行代碼無法編譯併產生與第一個代碼完全相同的錯誤...您確定實際嘗試編譯該代碼(而不是查看某些已反編譯的代碼或文檔) ? –
你看着錯誤的文件。這是一個*引用程序集*,而不是在運行時實際使用的程序集。或者當您使用GoTo Definition命令時,您可能會在VS中獲得虛假的反編譯元數據。 .NET 4引用程序集僅在編譯時使用,僅包含聲明,主體爲空。運行時程序集從GAC中檢索。一定要看看這些,你可以隨意導航c:\ windows \ microsoft.net \ assembly。或者使用[Reference Source](https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,577032c8811e20d3)。 –