38

インスタンスがない場合、型のインスタンス プロパティの名前を定期的に取得したいと考えています。現在これを行うために、パラメーターを解釈し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)。説明されている構文は実際にはそのまま機能します。

4

2 に答える 2

56

過去に、ドキュメントはこれを明示的に説明し、一部を読みました:

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

これは、現在のドキュメントでは省略されています。ただし、例はこれを明確にします。Console.WriteLine(nameof(List<int>.Count)); // output: Countやなどのコード サンプルは、クラスのインスタンス メンバーの名前を使用して値を取得するConsole.WriteLine(nameof(List<int>.Add)); // output: Add方法を示しています。nameofstring

つまり、これは「通常は構文的に有効ではない」nameof(ClientService.EndDate)という質問での観察に反して、書いて動作させることができるはずです。

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

于 2016-07-08T03:50:36.470 に答える