我有以下课程:
public class HandleResourceReferencesParams
{
public Factory Factory { get; set; }
public DataObject Resource { get; set; }
public HandleAction Action { get; set; }
public enum HandleAction
{
Activate,
Disable,
Terminate
}
}
在以下代码中使用该代码:
var parameters = new HandleResourceReferencesParams();
parameters.Factory = context.Factory;
parameters.Resource = resource;
parameters.Action = parameters.HandleAction.Terminate; // Does not compile
HandleResourceReferences(parameters);
通过使用parameters.HandleAction
,我得到一个编译错误:
在非静态上下文中无法访问静态枚举“ HandleAction”
枚举显然没有声明为“静态”。当从一个对象实例中引用它时,为什么它具有静态上下文(也是非静态的)?
编辑:我已经找到了提姆提到的解决方案(谢谢)。我只是想了解为什么我会收到此错误。
错误消息很不幸,但是不幸的是您无法做到这一点……您试图访问类型的成员,而不是该类型的实例的成员,但是您这样做是为了:通过”实例。
基本上,这段代码无法编译的原因相同:
Thread t = new Thread(...);
t.Start();
t.Sleep(1000); // Nope, Sleep is a static method
所有嵌套类型实际上都是静态成员,因为您不能具有特定于包含类型实例的类型。
根据C#规范,第10.3.7节(重点是我的):
当字段,方法,属性,事件,运算符或构造函数声明包含
static
修饰符时,它将声明一个静态成员。此外,常量或类型声明会隐式声明一个静态成员。
因此,尽管没有static
修饰符,但枚举是该类型的静态成员。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句