Пытаюсь составить список перечислений, но жалобы на конвертации в int - PullRequest
2 голосов
/ 04 апреля 2019

Я пытаюсь создать класс, у которого есть свойство тегов.Так что я могу такой список этих классов для всех элементов с определенным тегом.

Итак, я сделал Enum тегов, чтобы их было легче читать.И затем в классе у меня есть список этих перечислений, но когда я пытаюсь заполнить список перечислениями, он говорит, что не может преобразовать тег в 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 ]

7 голосов
/ 04 апреля 2019

Посмотрите на конструкторы для List<T>. Конструкторы, которые принимают 1 параметр, принимают либо целое число для емкости, либо последовательность значений; ошибка связана с преобразованием tag.tag0 в int для емкости списка. Эта строка должна гласить:

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

Используется пустой конструктор:

new List<tag>()

... за которым следует инициализатор коллекции:

{ tag.tag0 }
2 голосов
/ 04 апреля 2019

говорит, что не может преобразовать тег в int

Так как в вашем примере List<T>(int capacity) было использовано , он пытается преобразовать ваш enum tag до int, чтобы соответствовать конструктору, но это не удается, поскольку enum tag не является int.


Попробуйте это:

new Trait("a string", "another string", new List<tag>{ tag.tag0 })
0 голосов
/ 04 апреля 2019

Два предыдущих ответа верны, поэтому я не собираюсь повторять их, я просто хочу добавить, что если у вашего класса может быть несколько тегов, вы также можете сделать что-то вроде этого (вместо создания 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...