C#中缺乏“nameof”运算符以实现类型安全数据绑定的解决方法?

18 浏览
0 Comments

C#中缺乏“nameof”运算符以实现类型安全数据绑定的解决方法?

近来有很多人倾向于在C#中引入一个nameof操作符。举个例子,nameof(Customer.Name)会返回字符串"Name"

我有一个领域对象。我需要将其绑定。然后,我需要属性的名称作为字符串。而且我希望它们是类型安全的。

我记得在.NET 3.5中遇到过一个绕过方法,它提供了nameof的功能,并涉及到了lambda表达式。然而,我一直没有找到这个绕过方法。有人能提供给我这个绕过方法吗?

如果可能的话,我也对在.NET 2.0中实现nameof的功能感兴趣。

0
0 Comments

问题的原因是C#中缺乏`nameof`运算符,该运算符可以在类型安全的数据绑定中使用。作者提到了一种解决方法,即使用委托来包装方法并获取方法的`MethodInfo`,从而获得方法的名称。但是这种方法只适用于方法,对于属性则不起作用,因为不能为属性的getter或setter方法创建委托。

要解决这个问题,可以使用表达式树来获取属性的名称。下面是一个示例代码:

private string GetPropertyName(Expression> propertyExpression)

{

MemberExpression memberExpression = (MemberExpression)propertyExpression.Body;

return memberExpression.Member.Name;

}

...

// 使用示例

string propertyName = GetPropertyName(() => this.PropertyName);

通过使用表达式树,我们可以获取属性的名称,进而解决了缺乏`nameof`运算符的问题。

0
0 Comments

在C#中,缺少了一个像'nameof'操作符的类型安全数据绑定的解决方法。解决方法是使用表达式树,并将该表达式树拆分以找到相关的MemberInfo。在这个笔记中有稍微详细的解释和注释(尽管没有提供提取成员的代码 - 这是在其他的SO问题中解决的)。

不幸的是,由于表达式树在.NET 2.0中不存在,所以没有等价的解决方法。

一个解决方案是避免拼写错误,即为特定属性获取相关的PropertyInfo的一组访问器,并对它们进行单元测试。这将是唯一一个包含字符串的地方。这样可以避免重复,并使重构更容易,但有点严格。

你是不是在找这个?imaginarydevelopment.blogspot.com/2009/10/…它引用了这个stackoverflow.com/questions/1329138/…

0
0 Comments

由于C#语言中缺乏'nameof'运算符,导致了以下的问题:

在上述代码中,我们想要获取SampleClass类中的Name属性的名称。为了实现这个目的,我们定义了一个Nameof的泛型类,其中有一个静态方法Property,接受一个表达式参数。该方法通过将传入的表达式转换为MemberExpression,并返回其成员的名称。在Main方法中,我们使用Nameof.Property(e => e.Name)来获取Name属性的名称,并将其打印出来。

需要注意的是,使用Expression对象会有一定的性能损失。创建Expression对象的开销相对较大。调用Foo(Expression>)的速度比调用传统的Foo(string propName)慢200倍。因此,我们希望在编译时期添加一个'nameof'运算符,以避免这种性能损失。

需要注意的是,上述代码必须在VS2015中编译,才能使用Expression.Body属性。

解决方法:请为compile-time nameof operator投票。

0