wake-up-neo.net

Kann der C # nameof-Operator auf eine Instanzeigenschaft ohne Instanz verweisen?

Ich möchte regelmäßig den Namen einer Instanzeigenschaft eines Typs abrufen, wenn ich keine Instanz habe. Derzeit verwende ich dazu die folgende Inhouse-Funktion, die den Expression[Func[T, object]]-Parameter interpretiert und den Namen der Eigenschaft zurückgibt:

var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate);
// Now str == "EndDate"

Es scheint jedoch eine Schande zu sein, den eingebauten Operator nameof nicht zu verwenden.

Leider scheint der Operator nameof entweder eine Instanz zu benötigen oder auf statische Eigenschaften zu verweisen.

Gibt es eine nette Möglichkeit, den Operator nameof anstelle unserer Inhouse-Funktion zu verwenden? Zum Beispiel:

nameof(ClientService.EndDate) // ClientService.EndDate not normally syntactically valid as EndDate is instance member

BEARBEITEN

Ich war völlig falsch, die beschriebene Syntax nameof(ClientService.EndDate) funktioniert tatsächlich so wie sie ist.

16
Brendan Hill

Aus der Dokumentation :

In den Beispielen sehen Sie, dass Sie mit einen Typnamen verwenden und auf einen Instanzmethoden-Namen zugreifen können. Sie brauchen keine Instanz des Typs[Hervorhebungsmethode]

Das heißt Sie sollten in der Lage sein, nameof(ClientService.EndDate) zu schreiben und es funktionieren zu lassen, entgegen Ihrer Aussage in der Frage, dass dies "normalerweise nicht syntaktisch gültig" wäre.

Wenn Sie Probleme mit der Syntax haben, geben Sie bitte ein gutes minimales, vollständiges und überprüfbares Codebeispiel an, das zuverlässig alle Fehler reproduziert, und geben Sie den genauen Text der Fehlermeldung an .

36
Peter Duniho

Tolle Antwort von Peter Duniho.

Bei Namenskollisionen können Sie auch Folgendes tun:

ClientService clientservice;
var str = nameof(clientservice.EndDate);

Nicht effizient, aber neugierig genug.

1
wonea