En C #, le nom du nom d'attribut de la transmission de l'expression de lambda est généralement délicat, surtout lorsque l'attribut est représenté par une chaîne. Une solution courante consiste à convertir les expressions de lambda en expressions de membres, mais cela ne s'applique qu'aux attributs de chaîne.
Plan d'amélioration
Afin de surmonter les limites des méthodes existantes, nous proposons une méthode commune qui renvoie l'objet d'expression spécifiée. Si l'expression ne représente pas les attributs, il est expulsé d'une exception.
PropertyInfo
Cette méthode utilise le paramètre pour l'inférence de type et accepte la forme
<code class="language-csharp">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; }</code>
Exemples réels source
Expression<Func<TSource, TProperty>>
Cette méthode fournit un moyen plus robuste et général d'extraire les informations d'attribut de l'expression de lambda.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!