Jro*_*nny 1 .net c# types expression properties
我有一个功能:
private string GetPropertyName(Expression<Func<object, object>> f) {
if ((f.Body as MemberExpression) != null) {
return (f.Body as MemberExpression).Member.Name;
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
它以这种方式使用:
string x1 = GetPropertyName(x => Property1);
string x2 = GetPropertyName(x => Property2);
string x3 = GetPropertyName(x => Property3);
Run Code Online (Sandbox Code Playgroud)
其中Property1是一个int,Property2是一个字符串,Property3是一个对象......
只有正确返回类型字符串和对象的Property2和Property3的名称,但Property1的f.Body作为MemberExpression为空...
为什么会这样,我们如何更改代码,以便函数正确返回属性的名称?
我猜问题是x => Property1
表达式包含隐式强制转换为对象.编译器添加此类强制转换以满足GetPropertyName的参数.
你应该检查这个演员表
private string GetPropertyName(Expression<Func<object, object>> f) {
var body = f.Body;
if (body.NodeType==ExpressionType.Convert)
body = ((UnaryExpression) body).Operand;
if ((body as MemberExpression) != null) {
return (body as MemberExpression).Member.Name;
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2686 次 |
最近记录: |