Создание универсального типа с использованием другого типа C#
У меня есть класс, который определяется как
public class SerializableList<TList, TValue> : IXmlSerializable where TList : IList<TValue>
Проблема возникает при попытке реализовать конструктор, чтобы убедиться, что у меня есть объект TList.
public SerializableList()
{
FList = new TList();
}
Что приводит к ожидаемой ошибке отсутствия ограничения new(). Как я хочу иметь возможность использовать определение
var myList = new SerializableList<SortedList<string>, string>();
Означает ли это, что я смотрю на вещи неправильно, или я могу определить новый объект FList?
2 ответа
Решение
public class SerializableList<TList, TValue> : IXmlSerializable
where TList : IList<TValue>, new()
То, что вы хотите, являются родовыми типами ограничений
В вашем случае объявление класса должно быть
public class SerializableList<TList, TValue>
: IXmlSerializable where TList : IList<TValue>, new()
куда new()
обеспечивает, что TList
должен иметь конструктор без параметров