我正在尝试创建一个具有标签属性的类。这样我就可以为具有特定标签的所有元素提供这些类的列表。
因此,我制作了一个枚举标签,以使其更易于阅读。 然后在课堂上我有这些枚举的列表,但是当我 尝试用枚举填充列表,它说不能 将标记转换为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)),
谢谢您的建议
答案 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");
}