C# nameof 运算符可以在没有实例的情况下引用实例 属性 吗?

Can C# nameof operator reference instance property without instance?

当我没有实例时,我经常想获取类型实例的名称 属性。目前要做到这一点,我使用以下内部函数来解释 Expression[Func[T, object]] 参数和 returns 属性 名称:

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) 实际上按原样工作。

过去,文档明确解释了这一点,部分阅读:

In the examples you see that you can use a type name and access an instance method name. You do not need to have an instance of the type[emphasis mine]

这在the current documentation中被省略了。然而,这些例子仍然清楚地说明了这一点。 Console.WriteLine(nameof(List<int>.Count)); // output: CountConsole.WriteLine(nameof(List<int>.Add)); // output: Add 等代码示例显示了如何使用 nameof 获取具有 class 的实例成员名称的 string 值。

即你应该能够写 nameof(ClientService.EndDate) 并让它工作,这与你在问题中的观察相反,这将是 “通常在句法上无效”.

如果您在语法方面遇到问题,请提供一个好的 Minimal, Complete, and Verifiable code example 可以可靠地重现您遇到的任何错误,并提供 准确的 文本错误信息。

@Peter Duniho 的回答很棒。

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

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

效率不高,但足够好奇。