Ошибка ограничений обобщений C#

280
30 июля 2018, 21:10
class NameClass<T> : ParentClass, INameClass<T> where T : List<A>, List<B>, new() {}

Создаю класс, где <T> булет принимать значения List<A> или List<B>.

У меня ругается на List<B>.

Говорит:

Ошибка CS0406 Все другие ограничения должны следовать после ограничения типа класса "List<B>"

Если меняю местами регается на List<A>.

EDIT:

class NameClass<T> : ParentClass, INameClass<T> where T : List<T>, new() {}

Если написать так, то ошибки нет. Но я не уверен будет ли это правильно работать, не будет ли закольцованности?

Answer 1

Ошибка CS0406 возникает, потому что ты пытаешься определить параметр Т как наследник от двух классов, что невозможно в C#.

В целом, как уже было отмечено в комментариях, по вопросу очень сложно судить о желаемом результате определения класса. Но, попытавшись догадаться, предлагаю такой вариант:

class NameClass<T> : ParentClass, INameClass<T> where T : List<ICommonAB>, new() {}

где ParentClass, INameClass<T>, ICommonAB - уже определённые ранее классы, а также ICommonAB является общим предком (или интерфейсом) классов A и B.

READ ALSO
Изменить размера заполненного массива C# в C++

Изменить размера заполненного массива C# в C++

Мне необходимо в C# создать массив типа double с фиксированной величинойДалее я его заполняю значениями

184
Анимация отрисовки графика строфоиды ZedGraph

Анимация отрисовки графика строфоиды ZedGraph

Требуется разработать приложение, которое: 1выводит график функции на экран; 2

213
Имена переменных и проверка типов во время Runtime

Имена переменных и проверка типов во время Runtime

Товарищи, возникли некоторые вопросы по поводу runtime, связанные с именами переменных и проверкой их типов, однако для лучшего понимания распишу...

228
WPF Постепенная подгрузка в datagrid из БД

WPF Постепенная подгрузка в datagrid из БД

Добрый день у меня есть контекст Library, таблица BooksС помощью метода Load() я загружаю в Local данные и потом local привязываю к datagrid

206