ホームページ > バックエンド開発 > C++ > 古い C# バージョンでタイプセーフなプロパティ名の取得を実現するにはどうすればよいですか?

古い C# バージョンでタイプセーフなプロパティ名の取得を実現するにはどうすればよいですか?

DDD
リリース: 2024-12-26 21:35:15
オリジナル
997 人が閲覧しました

How Can I Achieve Type-Safe Property Name Retrieval in Older C# Versions?

C# で nameof 演算子が存在しない場合のタイプ セーフな回避策

プロパティ名の文字列表現を返す nameof 演算子は、C# に最近追加されたものです。ただし、以前のバージョンの C# にはこの演算子がないため、タイプ セーフなデータバインディングが妨げられる可能性があります。

ラムダ式を使用したタイプ セーフなソリューション

1 つの回避策この問題では、ラムダ式を使用してプロパティ名を取得します。このアプローチは、nameof と同様の機能を提供しながら、型の安全性を確保します。その仕組みは次のとおりです。

  1. 静的 Property メソッドを使用して、Nameof というジェネリック クラスを定義します。
  2. Property メソッド内で、提供されたラムダ式の本体を取得します。
  3. 本文を MemberExpression としてキャストし、Member からプロパティ名を抽出しますfield.

使用例

次のコードは、この回避策の使用方法を示しています。

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート