我有一个PropertyInfo,我想检查它是否是特定的。知道它的ReflectedType
是正确的,我可以这样做:
bool TestProperty(PropertyInfo prop)
{
return prop.Name == "myPropertyName";
}
问题是我的财产myPropertyName
可能会改变未来的名称,我无法意识到上述代码已经崩溃。
有没有一种安全的方法来测试我想要的东西,可能是使用Expression?
答案 0 :(得分:1)
如果您可以为该属性设置Expression
,则可以从此表达式中检索名称:
public static string PropertyName<T>(this Expression<Func<T, object>> propertyExpression)
{
MemberExpression mbody = propertyExpression.Body as MemberExpression;
if (mbody == null)
{
//This will handle Nullable<T> properties.
UnaryExpression ubody = propertyExpression.Body as UnaryExpression;
if (ubody != null)
{
mbody = ubody.Operand as MemberExpression;
}
if (mbody == null)
{
throw new ArgumentException("Expression is not a MemberExpression", "propertyExpression");
}
}
return mbody.Member.Name;
}
然后你可以用下面的方式使用它:
bool TestProperty(PropertyInfo prop)
{
return prop.Name == Extensions.PropertyName<TargetClass>(x => x.myPropertyName);;
}