#c_sharp #net #ооп
Всем доброго времени суток. Может быть кто-то уже сталкивался с таким и может помочь? public static class JSON { public static string Serialize_object_TO_JSON(this T Entity) where T:ENT { return JsonConvert.SerializeObject(Entity); } } Есть некий класс, который наследует ENT и передавать его в атрибуты можно. Дальше мне пришлось переделать метод так, чтоб она работал с коллекциями: public static class JSON { public static string Serialize_object_TO_JSON (this T Entity) where T:List { return JsonConvert.SerializeObject(Entity); } } После чего компилятор говорит, что ему не удалось привести тип класса, который наследуется от ENT, к типу List . P.S. Изначально задавать обобщение конечного класса я не могу, т.к. их довольно много, именно по этому попытался делать через наследование.
Ответы
Ответ 1
Попробуйте так, если Вам это разрешает бизнес логика: public static class JSON { public static string Serialize_object_TO_JSON(this T Entity) where T : IEnumerable { return JsonConvert.SerializeObject(Entity); } } Дело в том что List - инвариантен. И все классы в .NET инвариантны. То есть это полное соответствие типов. Означает, что можно использовать только изначально заданный тип. Таким образом, параметр инвариантного универсального типа не является ни ковариантным, ни контравариантным. С другой стороны есть IEnumerable где тип-параметр T помечен как out - ковариантным. Позволяет использовать тип с большей глубиной наследования, чем задано изначально. Полное описание почему так +1 за хороший пример
Комментариев нет:
Отправить комментарий