尝试列出枚举,但对转换为int

时间:2019-04-03 21:13:57

标签: c# enums

我正在尝试创建一个具有标签属性的类。这样我就可以为具有特定标签的所有元素提供这些类的列表。

因此,我制作了一个枚举标签,以使其更易于阅读。 然后在课堂上我有这些枚举的列表,但是当我 尝试用枚举填充列表,它说不能 将标记转换为int。这是否意味着我每次都必须手动将枚举转换为int?还是我做错了什么?

     enum tag {tag0,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9};

    class Trait
{
    ...
    public List<tag> Tags;
    ...


    new Trait("a string", "another string", new List<tag>(tag.tag0)),

谢谢您的建议

3 个答案:

答案 0 :(得分:7)

查看List<T>的构造函数。带有1个参数的构造函数采用容量的整数或值的序列。该错误与将tag.tag0转换为int以获得列表容量有关。该行应显示为:

new Trait("a string", "another string", new List<tag>() { tag.tag0 }),

这使用空的构造函数:

new List<tag>()

...,其后是集合初始化程序:

{ tag.tag0 }

答案 1 :(得分:2)

  

它说不能将标记转换为int

由于在您的示例List<T>(int capacity) has been used中,它试图将您的enum tag转换为int以便与构造函数匹配,但是失败为enum tag不是int


尝试一下:

new Trait("a string", "another string", new List<tag>{ tag.tag0 })

答案 2 :(得分:0)

前面的两个答案是正确的,所以我不再重复它们,我只是想补充一点,如果您的班级可以有多个标签,您还可以执行类似的操作(而不是创建List<tag> ):

[Flags]
public enum tag
{
    tag0 = 1,
    tag1 = 2,
    tag2 = 4,
    tag3 = 8,
    tag4 = 16
}


public class Trait
{
    ...
    public tag Tags:
    ...
}

var trait = new Trait { Tags = tag.tag0 | tag.tag1 };

if ((trait.Tags & tag.tag2) == tag.tag2)
{
      // use & to check if tag exists
      Console.WriteLine("Has tag2");
}
else
{
     Console.WriteLine("Does not have tag2");
}

trait.Tags = trait.Tags | tag.tag2;   // use | to add


if ((trait.Tags & tag.tag2) == tag.tag2)
{
      // use & to check if tag exists
      Console.WriteLine("Has tag2");
}
else
{
     Console.WriteLine("Does not have tag2");
}

Live Demo