Теперь, что меня смущает, так это то, как я преобразую «сущность» в объект «Задача», но теперь только в этот объект, но в другие объекты, которые мне нужно преобразовать как назначение, которому нужен часовой пояс.
Вам НЕ нужно кастовать, если вы используете дженерики.Или сформулируйте это по-другому: причина, по которой вы используете дженерики, заключается в том, что вы не хотите разыгрывать.Чтобы проиллюстрировать это, ниже приведен отрывок из Введение в C # Generics MSDN.
Поскольку общий код не вызывает блокировку и распаковку типов значений илиПри приведении ссылочных типов производительность значительно улучшается.
В общем, дженерики имеют следующие преимущества:
- повышает производительность
- обеспечивает безопасность типов
- многоразовый
Если вам нужен более конкретный пример, посмотрите (и сравните) ArrayList и List (T) (найдитеих в MSDN).Для метода добавления ArrayList имеет следующую подпись:
public virtual int Add(Object value)
Тот же метод List (T) определяется как:
public void Add(T item)
Таким образом, вы можете видеть, что универсальный метод принимает ЛЮБОЙ тип (многоразовый) и работает с типом безопасным для типов способом без необходимости приведения (улучшаетспектакль).Конечно, ArrayList также можно использовать многократно, но вам нужно выполнить наложение на него, сделать его менее типичным и иметь худшую производительность.
Сказав это, мой предыдущий абзац на самом деле имеетспутанность сознания.Хотя вы можете использовать generic для работы с ЛЮБЫМ типом, вы также можете реализовать ограничение для универсального параметра, реализующего конкретный интерфейс, ограничивая таким образом универсальный параметр определенным набором классов (тех, которые реализуют интерфейс).Более подробный взгляд на эту тему (Общие ограничения) можно найти в разделе Введение в общие черты C #, упомянутом ранее.
Что касается примера кода, @Ed S. на самом деле показал жизнеспособный путь.(Обратимся к примеру кода @Ed S.) Благодаря использованию общих ограничений параметр ограничивается классами, которые реализуют IEntity , интерфейс которого имеет метод ConvertToUtcTime .