Chcę uzyskać PropertyInfo dla określonej właściwości. Mógłbym użyć:
foreach(PropertyInfo p in typeof(MyObject).GetProperties())
{
if ( p.Name == "MyProperty") { return p }
}
Ale musi być sposób na zrobienie czegoś podobnego do
typeof(MyProperty) as PropertyInfo
Jest tu? A może utknąłem podczas porównywania ciągów znaków niebezpiecznych?
Twoje zdrowie.
c#
reflection
tenpn
źródło
źródło
PropertyInfo result =
zamiastvar result =
.Istnieje sposób .NET 3.5 z lambdami /
Expression
, który nie używa łańcuchów ...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(); } } }
źródło
Expression
PropertyHelper<Derived>.GetProperty(x => x.BaseProperty);
. Zobacz stackoverflow.com/questions/6658669/ ...Możesz to zrobić:
typeof(MyObject).GetProperty("MyProperty")
Jednak ponieważ C # nie ma typu „symbol”, nie ma nic, co pomoże uniknąć używania ciągu. Nawiasem mówiąc, dlaczego nazywasz ten typ niebezpiecznym?
źródło
Odbicie jest używane do oceny typu w czasie wykonywania. Dlatego stałych łańcuchowych nie można zweryfikować w czasie kompilacji.
źródło