Ich möchte den folgenden C # 6-Code verwenden
%Vor%... und die folgende Ausgabe erhalten:
Joe
Der folgende Versuch
%Vor% schlägt fehl, da nameof
nicht auf this
angewendet werden kann. Ist es ein Workaround für dieses Problem?
BEARBEITEN . Das Szenario, mit dem ich arbeite, stellt sicher, dass keine zwei Referenzen auf dasselbe Self
-Objekt zeigen.
Nein, nameof
bezieht sich auf den Namen der Kompilierungszeit des Elements, auf das Sie verweisen. Wenn ein Objekt eine Name
-Eigenschaft als Teil seines Status haben soll, unabhängig davon, wie Sie auf die Name
-Eigenschaft bekommen - wie Frédéric Hamidi sagt, könnte es mehrere Variablen geben ( oder keine), die sich auf dasselbe Objekt beziehen. Grundsätzlich müssen Sie zwischen einem Objekt und einer Variablen unterscheiden, die sich auf dieses Objekt bezieht.
Wenn Sie jedoch einen Konstruktor haben, um den Namen anzugeben, können Sie einige Tricks anwenden, um den richtigen Namen leichter zu finden:
%Vor%Dann:
%Vor% Die Idee für nameof
besteht darin, Dinge für die Angabe von Programmelementen während der Laufzeit sicher zu machen, aber mit der Sicherheitsprüfung für die Kompilierzeit.
Man sollte atomisieren was man anzeigen möchte. Zum Beispiel füge ich in meinen Fehlernachrichten die relevanten Informationen des Klassennamens und der Methode als solcher ein und ihre Überprüfung, wenn ich also einen der Namen ändere, werden sie als Kompilierzeitfehler abgefangen:
%Vor%Ausgabe
%Vor% Damit solltest du ToString()
überschreiben und den Klassennamen als solches angeben