Я был смущен этой проблемой. Традиционно, если я пишу метод, как это:Почему методы в Enumerable могут быть без тела метода?
public static class MyClass
{
public static int myMethod(this int x, Func<int, bool> evaluate);
}
Я получаю ошибку компиляции, сказал:
'ExtentionMethods.MyClass.myMethod (интермедиат, System.Func)' должен объявить тело поскольку он не обозначен как абстрактный, внешний или частичный
Это понятно. Но я посмотрел класс Enumerable в пространстве имен System.Linq. Я обнаружил, что все методы не имеют тела метода, например:
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
И нет никакой ошибки компиляции. Зачем?
В чем причина?
Вторая строка кода, который вы отправили, не скомпилирует и не производит точно такую же ошибку, которую вы получите для первой ... Вы действительно пытались скомпилировать этот код (и не смотрели на какой-то декомпилированный код или документацию) ? –
Вы посмотрели не тот файл. Это была * эталонная сборка *, а не сборка, которая фактически используется во время выполнения. Или, возможно, поддельные декомпилированные метаданные, которые вы получите в VS, когда используете команду GoTo Definition. Сборочные сборки .NET 4 используются только во время компиляции и содержат только объявления, тела пустые. Среда выполнения выполняется из GAC. Обязательно посмотрите на них, вы можете перемещаться по c: \ windows \ microsoft.net \ по желанию. Или используйте [Reference Source] (https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,577032c8811e20d3). –