Value Type Equals-Methode - warum verwendet der Compiler Reflexion?
Ich bin gerade auf etwas Seltsames gestoßen: Wenn Sie die Equals () -Methode für einen Werttyp verwenden (und diese Methode natürlich nicht überschrieben wurde), erhalten Sie etwassehr, sehr langsame Felder werden eins zu eins durch Reflektion verglichen! Wie in :
<code>public struct MyStruct{ int i; } (...) MyStruct s, t; s.i = 0; t.i = 1; if ( s.Equals( t )) /* s.i will be compared to t.i via reflection here. */ (...) </code>
Meine Frage: Warum generiert der C # -Compiler keine einfache Methode zum Vergleichen von Werttypen? So etwas wie (in der Definition von MyStruct):
<code> public override bool Equals( Object o ){ if ( this.i == o.i ) return true; else return false; } </code>
Der Compiler weiß, welche Felder MyStruct zur Kompilierungszeit enthält. Warum wartet er bis zur Laufzeit, um MyStruct-Felder aufzulisten?
Sehr seltsam für mich.
Vielen Dank :)
HINZUGEFÜGT : Sorry, mir ist nur klar, dass natürlichEquals
ist kein Sprachschlüsselwort, sondern eine Laufzeitmethode ... Dem Compiler ist diese Methode überhaupt nicht bekannt. Es ist also sinnvoll, hier Reflexion zu verwenden.