一尘不染

解决C#中缺乏用于类型安全数据绑定的'nameof'运算符的解决方法?

c#

nameof在C#中包含运算符的想法很多。作为此运算符如何工作的示例,nameof(Customer.Name)将返回字符串"Name"

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

我记得在.NET
3.5中遇到了一种变通方法,该变通方法提供了nameoflambda表达式并涉及其中。但是,我无法找到此解决方法。谁能为我提供该解决方法?

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


阅读 407

收藏
2020-05-19

共1个答案

一尘不染

这段代码基本上是这样做的:

class Program
{
    static void Main()
    {
        var propName = Nameof<SampleClass>.Property(e => e.Name);

        Console.WriteLine(propName);
    }
}

public class Nameof<T>
{
    public static string Property<TProp>(Expression<Func<T, TProp>> expression)
    {
        var body = expression.Body as MemberExpression;
        if(body == null)
            throw new ArgumentException("'expression' should be a member expression");
        return body.Member.Name;
    }
}

(当然是3.5码…)

2020-05-19