名称如何工作?

我只是想知道来自C#6的名称如何才能访问非静态属性,就像它是静态的一样。 这是一个例子

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, } } 

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

nameof Interpreter在compiletime时解析并转换为static string
在你的案例中, nameof(TestClass.Name)只会将"Name"作为字符串返回。
你必须使用nameof(TestClass)
使用nameof可以最大限度地减少代码中的冗余(例如:您不必使用nameof为属性名称或类似内容定义字符串。

您还可以使用它来表示类名。 但要注意! nameof(MyClass)
如果你有一个派生类,可能与在运行时不一样! 出于运行时的目的,请使用typeOf.GetType()

在MSDN上阅读更多内容