ホームページ > バックエンド開発 > C++ > C#でLambda式からプロパティ名を効率的に取得するにはどうすればよいですか?

C#でLambda式からプロパティ名を効率的に取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-02-01 05:51:09
オリジナル
764 人が閲覧しました

How Can I Efficiently Retrieve Property Names from Lambda Expressions in C#?

ラムダ式から属性名を効果的に取得

c#では、特に属性が文字列で表される場合、ラムダ式の伝送の属性名の名前は通常難しいです。一般的な解決策は、ラムダ式をメンバー式に変換することですが、これは文字列属性にのみ適用できます。

改善計画

既存の方法の制限を克服するために、指定された式のオブジェクトを返す一般的な方法を提案します。式が属性を表していない場合、例外から解放されます。

PropertyInfoこのメソッドは、タイプ推論にパラメーターを使用し、ラムダ式の

形式を受け入れます。
public static PropertyInfo GetPropertyInfo<TSource, TProperty>(
    TSource source,
    Expression<Func<TSource, TProperty>> propertyLambda)
{
    if (propertyLambda.Body is not MemberExpression member)
    {
        throw new ArgumentException(string.Format(
            "表达式 '{0}' 指向方法,而非属性。",
            propertyLambda.ToString()));
    }

    if (member.Member is not PropertyInfo propInfo)
    {
        throw new ArgumentException(string.Format(
            "表达式 '{0}' 指向字段,而非属性。",
            propertyLambda.ToString()));
    }

    Type type = typeof(TSource);
    if (propInfo.ReflectedType != null && type != propInfo.ReflectedType && !type.IsSubclassOf(propInfo.ReflectedType))
    {
        throw new ArgumentException(string.Format(
            "表达式 '{0}' 指向的属性不属于类型 {1}。",
            propertyLambda.ToString(),
            type));
    }

    return propInfo;
}
ログイン後にコピー

実際の例sourceExpression<Func<TSource, TProperty>>

次の例は、この改善方法の使用法を示しています。

この方法は、ラムダ式から属性情報を抽出するためのより堅牢で一般的な方法を提供します。

以上がC#でLambda式からプロパティ名を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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