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; }
実際の例source
Expression<Func<TSource, TProperty>>
この方法は、ラムダ式から属性情報を抽出するためのより堅牢で一般的な方法を提供します。
以上がC#でLambda式からプロパティ名を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。