我有一个函数:
private string GetPropertyName(Expression<Func<object, object>> f) {
if ((f.Body as MemberExpression) != null) {
return (f.Body as MemberExpression).Member.Name;
}
return "";
}
它是这样使用的:
string x1 = GetPropertyName(x => Property1);
string x2 = GetPropertyName(x => Property2);
string x3 = GetPropertyName(x => Property3);
其中 Property1 是一个 int,Property2 是一个字符串,Property3 是一个对象...
只有Property2和Property3分别是string和object类型的名字才正确返回,但是Property1的f.Body as MemberExpression是null...
为什么会这样,我们如何更改代码以使函数正确返回属性的名称?
最佳答案
我想问题是 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 "";
}
关于c# - 为什么 C#.net 中的表达式主体不能使用 int、double 或 bool 类型的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875720/