In C#ist der Name des Attributnamens der Übertragung des Lambda -Ausdrucks normalerweise schwierig, insbesondere wenn das Attribut durch eine Zeichenfolge dargestellt wird. Eine gemeinsame Lösung besteht darin, Lambda -Ausdrücke in Mitgliedsausdrücke umzuwandeln, dies ist jedoch nur für String -Attribute anwendbar.
Verbesserungsplan
Um die Einschränkungen bestehender Methoden zu überwinden, schlagen wir eine gemeinsame Methode vor, die das -Objekt der angegebenen Expression zurückgibt. Wenn der Ausdruck keine Attribute darstellt, wird er aus einer Ausnahme herausgeworfen.
PropertyInfo
Diese Methode verwendet den Parameter für die Typinferenz und akzeptiert die
<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>
Tatsächliche Beispiele source
Expression<Func<TSource, TProperty>>
Diese Methode bietet eine robustere und allgemeinere Möglichkeit, Attributinformationen aus dem Lambda -Ausdruck zu extrahieren.
Das obige ist der detaillierte Inhalt vonWie kann ich Eigenschaftennamen effizient aus Lambda -Ausdrücken in C#abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!