C#nameof运算符引用实例属性可以没有实例吗?

时间:2016-07-08 02:02:35

标签: c# c#-6.0 nameof

当我没有实例时,我经常想要获取类型的实例属性的名称。目前要执行此操作,我使用以下内部函数来解释Expression[Func[T, object]]参数并返回属性名称:

var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate);
// Now str == "EndDate"

然而,不使用内置的nameof运算符似乎很遗憾。

不幸的是,nameof运算符似乎需要一个实例,或者引用一个静态属性。

使用nameof运算符而不是内部函数是否有一种巧妙的方法?例如:

nameof(ClientService.EndDate) // ClientService.EndDate not normally syntactically valid as EndDate is instance member

修改

我完全错了,所描述的语法nameof(ClientService.EndDate)实际上是按原样运作。

2 个答案:

答案 0 :(得分:35)

来自the documentation

  

在示例中,您会看到您可以使用类型名称并访问实例方法名称。您不需要具有类型的实例 ... [强调我的]

即。你应该能够写nameof(ClientService.EndDate)并使其有效,这与你在问题中的陈述相反,这将是&#34;通常不是语法上的有效&#34;

如果您在使用语法时遇到问题,请提供一个好的Minimal, Complete, and Verifiable code example,以便可靠地重现您获得的任何错误,并提供错误消息的完整文本。

答案 1 :(得分:1)

@Peter Duniho的精彩回答。

如果出现姓名冲突,您还可以执行以下操作:

ClientService clientservice;
var str = nameof(clientservice.EndDate);

效率不高,但很好奇。