Gelegentlich stelle ich beim Stack Overflow Fragen zu Randfällen und anderen Verrücktheiten fest, die leicht von Leuten wie Jon Skeet und Eric Lippert beantwortet werden können und die ein tiefes Wissen über die Sprache und ihre vielen Feinheiten aufweisen, wie diese:
Sie könnten denken, um eine
foreach
Schleife zu verwenden, muss die Sammlung, über die Sie iterieren,IEnumerable
oder implementierenIEnumerable<T>
. Aber wie sich herausstellt, ist das eigentlich keine Voraussetzung. Erforderlich ist, dass der Typ der Auflistung eine öffentliche Methode hat, die aufgerufen wirdGetEnumerator
, und dass ein Typ zurückgegeben wird, der einen öffentlichen Eigenschafts-Getter hat, der aufgerufen wird,Current
und eine öffentliche MethodeMoveNext
, die a zurückgibtbool
. Wenn der Compiler feststellen kann, dass alle diese Anforderungen erfüllt sind, wird der Code zur Verwendung dieser Methoden generiert. Nur wenn diese Anforderungen nicht erfüllt sind, prüfen wir, ob das ObjektIEnumerable
oder implementiertIEnumerable<T>
.
Das ist cool zu wissen. Ich kann verstehen, warum Eric das weiß; Er ist im Compiler-Team, also muss er es wissen. Aber was ist mit denen, die solch tiefes Wissen demonstrieren und keine Insider sind?
Wie finden bloße Sterbliche (die nicht im C # -Compilerteam sind) über solche Dinge Bescheid?
Gibt es Methoden, mit denen diese Leute dieses Wissen systematisch ausgraben, erforschen und verinnerlichen (es zu ihrem eigenen machen)?