Преобразование универсального типа в другой метод расширения универсального типа - PullRequest
2 голосов
/ 20 апреля 2011

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

public static List<TTypeConvertTo> ConvertFromEntityContext<TTypeConvertFrom>(this List<TTypeConvertFrom> source)
        where TTypeConvertTo : BaseModel
    {
        List<TTypeConvertTo> result = null;

        if (source != null)
        {
            result = new List<TTypeConvertTo>();
            foreach (var item in source)
            {
                result.Add(item.ConvertFromEntityContext());
            }
        }

        return result;
    }

1 Ответ

1 голос
/ 20 апреля 2011

Если метод универсальный, он должен включать все универсальные типы, включая TTypeConvertTo.Возможно, вам не нужен TTypeConvertFrom в качестве универсального типа, поэтому попробуйте:

public static List<TTypeConvertTo> ConvertFromEntityContext<TTypeConvertTo>
          (this List<FromBaseModel> source)

Если вам нужно, чтобы оба типа были универсальными (что на самом деле не кажется необходимым), вам также необходимо иметь1006 * ограничен базовым типом, который имеет метод ConvertFromEntityContext:

public static List<TTypeConvertTo> ConvertFromEntityContext<TTypeConvertFrom, TTypeConvertTo>
          (this List<TTypeConvertFrom > source)
          where TTypeConvertTo : BaseModel, TTypeConvertFrom : FromBaseModel

Это менее целесообразно, так как это сделает вызов слишком многословным: компилятор не может определить тип возврата, поэтомуПри каждом вызове метода необходимо указывать оба типа.

В любом случае, вы можете использовать LINQ для перезаписи тела вашего метода:

if (source == null)
    return null;
return source.Select(item => item.ConvertFromEntityContext()).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...