Почему нельзя ссылаться на тип через выражение? - PullRequest
4 голосов
/ 08 ноября 2011

Следующий код кажется невозможным для компиляции, независимо от того, как сильно я пытаюсь его привести: 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);
    }
}

Ответы [ 5 ]

14 голосов
/ 08 ноября 2011

Вы путаете поле с типом 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.

4 голосов
/ 08 ноября 2011

Вы не устанавливаете свойство, вы пытаетесь установить перечисление.

Добавьте 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);
    }
}
2 голосов
/ 08 ноября 2011

Вы определили 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);
    }
}
1 голос
/ 08 ноября 2011

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);
    }
}
0 голосов
/ 08 ноября 2011

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...