名称如何工作?

How does nameof work?

我只是想知道 C# 6 中的 nameof 为什么可以访问非静态 属性 就像它是静态的一样。这是一个例子

public class TestClass
{
    public string Name { get; set; }
}

public class Test
{
    public Test()
    {
        string name = nameof(TestClass.Name); // whats so speciall about nameof
        //string name2 = TestClass.Name; this won't compile obviously, 
    }
}

它不是 "accessing" 属性 - 该运算符纯粹是一种编译器机制,用于将参数的 "name" 注入代码。在这种情况下,它将用 "Name" 替换 nameof(TestClass.Name)。它是非静态的这一事实无关紧要。

nameof 口译员在 compiletime 处解析并翻译成 static string
在你的情况下 nameof(TestClass.Name) 你只会 return "Name" 作为一个字符串。
你必须使用 nameof(TestClass).
使用 nameof 您可以最大限度地减少代码中的冗余(例如:您不必使用 nameof.

为属性名称或类似的东西定义字符串

您也可以用它来表示一个 classes 名称。但请注意! nameof(MyClass)
如果你有一个派生的class,可能与运行时不同! 出于运行时目的,请改用 typeOf.GetType()

MSDN

阅读更多内容