web-dev-qa-db-ja.com

C#nameofオペレーターはインスタンスなしでインスタンスプロパティを参照できますか?

インスタンスがないときに、型のインスタンスプロパティの名前を定期的に取得したいと思っています。現在これを行うには、_Expression[Func[T, object]]_パラメーターを解釈してプロパティ名を返す次の社内関数を使用します。

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

ただし、組み込みのnameof演算子を使用しないのは残念です。

残念ながら、nameof演算子にはインスタンスか、静的プロパティを参照する必要があるようです。

社内関数の代わりにnameof演算子を使用するきちんとした方法はありますか?例えば:

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

編集

私は完全に間違っていました。説明されている構文nameof(ClientService.EndDate)は実際にはそのまま機能します。

23
Brendan Hill

ドキュメント から:

例では、型名を使用してインスタンスメソッド名にアクセスできることがわかります。タイプのインスタンスは必要ありません[鉱山強調]

つまりこれは「通常は構文的に有効ではない」であるという質問のステートメントに反して、nameof(ClientService.EndDate)を記述して機能させることができるはずです。

構文に問題がある場合は、適切な 最小限、完全、検証可能なコード例 を提供してください。これにより、発生したエラーを確実に再現し、exactエラーメッセージのテキスト。

41
Peter Duniho

@Peter Dunihoによる素晴らしい回答。

名前の衝突の場合、次のことも実行できます。

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

効率的ではありませんが、興味津々です。

2
wonea