为什么不能通过表达式引用类型?

以下代码似乎无法编译,无论我如何努力投射它:P可以somone请告诉我我做错了什么?

public class LUOverVoltage { public string Name { get; set; } public enum OVType { OVLH, OVLL } public List PinGroups = new List(); public void Add(string name, OVType type, string Grp) { this.Name = name; this.OVType = type; //Why cannot reference a type through an expression? PinGroups.Add(Grp); } } 

你会混淆一个enum类型的字段与enum类型本身。 你的代码和string="bla"一样有用。

 public enum OVType { OVLH, OVLL } public class LUOverVoltage { public string Name { get; set; } public OVType OVType { get; set; } 

这声明了一个名为OVType的类型和一个具有相同名称的属性。 现在你的代码应该工作了。


作为旁注,您的类型名称和属性名称都违反了.net命名准则。

我将枚举类型命名为OverVoltKind ,并将属性命名为Kind

您没有设置属性,而是尝试设置枚举。

添加public OVType ovType并使用this.ovType = type

 public class LUOverVoltage { public enum OVType { OVLH, OVLL } public string Name { get; set; } public OVType ovType; public List PinGroups = new List(); public void Add(string name, OVType type, string Grp) { this.Name = name; this.ovType = type; PinGroups.Add(Grp); } } 

您已在class级中定义了一个Enum 。 你还没做的是声明一个变量来保存那个枚举的实例。

 public enum OVType { OVLH, OVLL } public class LUOverVoltage { public string Name { get; set; } public OVType OVType { get; set; } public List PinGroups = new List(); public void Add(string name, OVType type, string Grp) { this.Name = name; this.OVType = type; // setting the property, not the enum definition PinGroups.Add(Grp); } } 

OVType – 不是字段,它是一种类型

试试这个

 public class LUOverVoltage { public string Name { get; set; } public OVType Type {get; set;} public enum OVType { OVLH, OVLL } public List PinGroups = new List(); public void Add(string name, OVType type, string Grp) { this.Name = name; this.Type = type; PinGroups.Add(Grp); } } 

OVType是变量的类型。 您已将其设置为枚举 ,这是用于声明新枚举类型的关键字。 您需要将OVType声明为枚举类型,然后将其用作属性类型。

 public enum OVType { OVLH, OVLL } public class LUOverVoltage { public string Name { get; set; } public OVType OVType { get; set; } public List PinGroups = new List(); public void Add(string name, OVType type, string Grp) { this.Name = name; this.OVType = type; PinGroups.Add(Grp); } }