Ich möchte die PropertyInfo für eine bestimmte Eigenschaft erhalten. Ich könnte benutzen:
foreach(PropertyInfo p in typeof(MyObject).GetProperties())
{
if ( p.Name == "MyProperty") { return p }
}
Aber es muss einen Weg geben, etwas Ähnliches zu tun
typeof(MyProperty) as PropertyInfo
Gibt es? Oder bin ich nicht in der Lage, einen typsicheren Zeichenfolgenvergleich durchzuführen?
Prost.
c#
reflection
Tenpn
quelle
quelle
PropertyInfo result =
statt begannvar result =
.Es gibt eine .NET 3.5-Methode mit Lambdas /
Expression
, die keine Zeichenfolgen verwendet ...using System; using System.Linq.Expressions; using System.Reflection; class Foo { public string Bar { get; set; } } static class Program { static void Main() { PropertyInfo prop = PropertyHelper<Foo>.GetProperty(x => x.Bar); } } public static class PropertyHelper<T> { public static PropertyInfo GetProperty<TValue>( Expression<Func<T, TValue>> selector) { Expression body = selector; if (body is LambdaExpression) { body = ((LambdaExpression)body).Body; } switch (body.NodeType) { case ExpressionType.MemberAccess: return (PropertyInfo)((MemberExpression)body).Member; default: throw new InvalidOperationException(); } } }
quelle
Expression
PropertyHelper<Derived>.GetProperty(x => x.BaseProperty);
. Siehe stackoverflow.com/questions/6658669/…Du kannst das:
typeof(MyObject).GetProperty("MyProperty")
Da C # jedoch keinen "Symbol" -Typ hat, hilft Ihnen nichts dabei, die Verwendung von Zeichenfolgen zu vermeiden. Warum nennst du das übrigens typunsicher?
quelle
Die Reflexion wird zur Bewertung des Laufzeittyps verwendet. Daher können Ihre Zeichenfolgenkonstanten zur Kompilierungszeit nicht überprüft werden.
quelle