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

本文关键字:表达式 引用类型 不能 为什么 | 更新日期: 2023-09-27 18:14:01

下面的代码似乎是不可能编译无论我多么努力地试图cast它:p可以有人告诉我我做错了什么?

public class LUOverVoltage
{
    public string Name { get; set; }
    public enum OVType { OVLH, OVLL }
    public List<string> PinGroups = new List<string>();
    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);
    }
}

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

您混淆了枚举类型的字段和枚举类型本身。你的代码和说string="bla"一样有用。

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

声明了一个名为OVType的类型和一个同名的属性。现在你的代码应该可以工作了。


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

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

您不是在设置属性,而是在尝试设置enum。

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

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

您已经在类中定义了一个Enum。您没有做的是声明一个变量来保存该enum的实例。

public enum OVType { OVLH, OVLL }
public class LUOverVoltage
{
    public string Name { get; set; }
    public OVType OVType { get; set; }
    public List<string> PinGroups = new List<string>();
    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<string> PinGroups = new List<string>();
    public void Add(string name, OVType type, string Grp)
    {
        this.Name = name;
        this.Type = type;
        PinGroups.Add(Grp);
    }
}

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

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