C#中缺乏“nameof”运算符以实现类型安全数据绑定的解决方法?
问题的原因是C#中缺乏`nameof`运算符,该运算符可以在类型安全的数据绑定中使用。作者提到了一种解决方法,即使用委托来包装方法并获取方法的`MethodInfo`,从而获得方法的名称。但是这种方法只适用于方法,对于属性则不起作用,因为不能为属性的getter或setter方法创建委托。
要解决这个问题,可以使用表达式树来获取属性的名称。下面是一个示例代码:
private string GetPropertyName
{
MemberExpression memberExpression = (MemberExpression)propertyExpression.Body;
return memberExpression.Member.Name;
}
...
// 使用示例
string propertyName = GetPropertyName(() => this.PropertyName);
通过使用表达式树,我们可以获取属性的名称,进而解决了缺乏`nameof`运算符的问题。
在C#中,缺少了一个像'nameof'操作符的类型安全数据绑定的解决方法。解决方法是使用表达式树,并将该表达式树拆分以找到相关的MemberInfo。在这个笔记中有稍微详细的解释和注释(尽管没有提供提取成员的代码 - 这是在其他的SO问题中解决的)。
不幸的是,由于表达式树在.NET 2.0中不存在,所以没有等价的解决方法。
一个解决方案是避免拼写错误,即为特定属性获取相关的PropertyInfo的一组访问器,并对它们进行单元测试。这将是唯一一个包含字符串的地方。这样可以避免重复,并使重构更容易,但有点严格。
你是不是在找这个?imaginarydevelopment.blogspot.com/2009/10/…它引用了这个stackoverflow.com/questions/1329138/…
由于C#语言中缺乏'nameof'运算符,导致了以下的问题:
在上述代码中,我们想要获取SampleClass类中的Name属性的名称。为了实现这个目的,我们定义了一个Nameof
需要注意的是,使用Expression对象会有一定的性能损失。创建Expression对象的开销相对较大。调用Foo(Expression
需要注意的是,上述代码必须在VS2015中编译,才能使用Expression.Body属性。
解决方法:请为compile-time nameof operator投票。