Создание универсального типа с использованием другого типа 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 должен иметь конструктор без параметров

Другие вопросы по тегам