C# 6.0 - C# 名称运算符是否可以在没有实例的情况下引用实例属性



当我没有实例时,我经常想获取某个类型的实例属性的名称。目前为此,我使用以下内部函数来解释 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)实际上按原样工作。

过去,文档明确解释了这一点,部分内容如下:

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

当前文档中省略了这一点。但是,这些例子仍然清楚地表明了这一点。Console.WriteLine(nameof(List<int>.Count)); // output: CountConsole.WriteLine(nameof(List<int>.Add)); // output: Add 等代码示例演示如何使用 nameof 获取具有类的实例成员名称的 string 值。

也就是说,你应该能够写nameof(ClientService.EndDate)并让它工作,这与你在这个问题中的观察相反,即这将"通常语法无效"。

如果您在使用语法时遇到问题,请提供一个很好的最小、完整和可验证的代码示例,该示例可靠地重现您遇到的任何错误,并提供错误消息的确切文本。

@Peter Duniho的好答案。

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

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

效率不高,但足够好奇。

相关内容

  • 没有找到相关文章

最新更新