Ich war von diesem Problem verwirrt. Traditionell, wenn ich eine Methode wie folgt schreiben:Warum können Methoden in Enumerable ohne einen Methodenkörper sein?
public static class MyClass
{
public static int myMethod(this int x, Func<int, bool> evaluate);
}
Ich werde einen Compiler-Fehler erhalten, sagte:
'ExtentionMethods.MyClass.myMethod (int, System.Func)' einen Körper erklären müssen weil es nicht abstrakt, extern oder partiell markiert ist
Das ist verständlich. Aber ich schaute auf die Enumerable-Klasse unter dem Namensraum System.Linq. Ich fand, dass alle Methoden keinen Methodenkörper haben, zum Beispiel:
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
Und es gibt keinen irgendwelchen Kompilierungsfehler für ihn. Warum?
Was ist der Grund?
Die zweite Codezeile, die Sie gepostet haben, kompiliert nicht und erzeugt genau den gleichen Fehler wie beim ersten ... Sind Sie sicher, dass Sie tatsächlich versucht haben, diesen Code zu kompilieren (und nicht auf dekompilierten Code oder Dokumentation)? ? –
Sie haben sich die falsche Datei angesehen. Das war eine * Referenz-Assembly *, nicht die Assembly, die zur Laufzeit tatsächlich verwendet wird. Oder möglicherweise die gefälschten dekompilierten Metadaten, die Sie in VS erhalten, wenn Sie den GoTo Definition-Befehl verwenden. Die .NET 4-Referenzassemblys werden nur zur Kompilierungszeit verwendet und enthalten nur die Deklarationen, die Körper sind leer. Die Laufzeitassembly wird vom GAC abgerufen. Achten Sie darauf, diese zu betrachten, können Sie c: \ windows \ microsoft.net \ Assembly nach Belieben navigieren. Oder verwenden Sie die [Referenzquelle] (https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs577032c8811e20d3). –