gpt4 book ai didi

c# - 在静态字段初始值设定项中使用非静态字段的名称

转载 作者:行者123 更新时间:2023-12-05 00:57:19 26 4
gpt4 key购买 nike

我有一个静态类 List<T>和一些非静态字段。现在我想用一些对象初始化这个列表,如下所示:

class C
{
private Bar bar;

private static List<Foo> list = new List<Foo>()
{
new Foo(nameof(bar)), // OK
new Foo(nameof(bar) + nameof(bar.Baz)) // Error CS0236
};
}

同时创建第一个 Foo对象工作正常,我收到错误

A field initializer cannot reference the non-static field, method, or property C.bar



在第二个。

我知道静态成员无法访问实例数据(请参阅 this question )。但据我了解, nameof在编译时评估并且只访问元数据而不是实例数据。那么为什么这不起作用,有没有办法解决?

最佳答案

解决方法很简单,使用类型名称而不是变量名称:

new Foo(nameof(bar) + nameof(Bar.Baz))

至于为什么,我不是很确定。也许是因为在那里拥有变量需要编译器来初始化它。 (我们可以看到这并不重要,但也许编译器并不那么聪明......)。它只需要静态类型名称。

关于c# - 在静态字段初始值设定项中使用非静态字段的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34791473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com