我被这个问题搞糊涂了。传统上,如果我写这样的方法:为什么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)。 –