Wie man nameof (this) behandelt, um den Klassennamen zu melden

7

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.

    
nincsmail 08.01.2015, 10:26
quelle

4 Antworten

13

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%     
Jon Skeet 08.01.2015 10:33
quelle
6

Sie können einfach nameof für die Variable selbst verwenden:

%Vor%

Hier ist ein funktionierendes Beispiel der aktuelle Roslyn Version mit

    
i3arnon 08.01.2015 10:33
quelle
0

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

%Vor%     
OmegaMan 10.01.2016 18:43
quelle
0

Ich erstelle normalerweise eine interne Konstante für den Umgang mit langen Klassennamen:

%Vor%

Dann können Sie das in Ihrem Code verwenden:

%Vor%     
CodeSoul 15.03.2018 12:16
quelle

Tags und Links