Я новичок в генериках в C#, и я пытаюсь создать метод, который будет использовать generics. Я попытался создать ключевое слово where при попытке создать локальную переменную, поэтому я уверен, что она будет частью решения.Как я могу сообщить компилятору, что мои дженерики определенно разрешают «| =» или кастинг для int?
Причина в том, что у меня есть несколько различных переменных перечисления, но метод будет делать то же самое с каждым (учитывая строку, которая является одним из определенных значений перечисления, переключает ее, используя перечисление, подобное битовому полю).
У меня есть большая часть этого вместе, часть, которую я сейчас застрял, может рассказать об общем методе, это нормально, чтобы разрешить «| =», так как я уверен, что любой тип, который передается, будет поддерживать оператора.
Я хотел бы иметь возможность поддерживать общность, если это возможно, также может быть перечислением или списком, и я буду выполнять разные коды кода в зависимости от типа.
Пример того, что я везу о
enum someType { value1 = 1<<0, value2 = 1<<1, value3 = 1<<2 }; // and so on
// some more enums
private T someMethod<T>(string myIdentifyers)
where T: new()
{
// suppose myIdentifiers is 1 more more of the valid enum options
// assume that the correct strings and enum combinations will be passed
T retval = new T();
while() {
// assume a loop with a method call that parses off one identifyer at a time
// if I have to convert the enum to an int first, so be it, but
// at this point I can't tell it that a cast to int exists
retval |= (T)System.Enum.Parse(typeof(T), oneIdentifyer, false);
}
return retval;
}
Перечисление 'someType' должны быть отмечены с' [Flags] 'атрибут, если вы используете его в качестве набор битфлагов. – asawyer
@asawyer Я просто помещаю [Флаги] перед каждой декларацией перечисления? – Stephen
См. Ответ Бруно Сильвы, он отметил перечисление. – asawyer