C# で nameof 演算子が存在しない場合のタイプ セーフな回避策
プロパティ名の文字列表現を返す nameof 演算子は、C# に最近追加されたものです。ただし、以前のバージョンの C# にはこの演算子がないため、タイプ セーフなデータバインディングが妨げられる可能性があります。
ラムダ式を使用したタイプ セーフなソリューション
1 つの回避策この問題では、ラムダ式を使用してプロパティ名を取得します。このアプローチは、nameof と同様の機能を提供しながら、型の安全性を確保します。その仕組みは次のとおりです。
使用例
次のコードは、この回避策の使用方法を示しています。
class Program { static void Main() { var propName = Nameof<Customer>.Property(e => e.Name); Console.WriteLine(propName); } } public class Nameof<T> { public static string Property<TProp>(Expression<Func<T, TProp>> expression) { var body = expression.Body as MemberExpression; if(body == null) throw new ArgumentException("'expression' should be a member expression"); return body.Member.Name; } }
この例では、propName は次のようになります。 e => という式を使用して Property を呼び出した後、文字列「Name」を含めます。 e.Name.
注: この回避策には .NET 3.5 以降が必要です。 .NET 2.0 の場合は、別のアプローチが必要になります。ただし、ラムダ式またはリフレクションを使用せずに nameof の機能を完全に複製することはできません。どちらも .NET 2.0 ではサポートされていません。
以上が古い C# バージョンでタイプセーフなプロパティ名の取得を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。