我正在做一些非法的事情,因为编译器抱怨但我不知道应该做什么。基本上我想将一种类型的列表转换为另一种类型的列表。任何帮助非常感谢。这是我的扩展方法:
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;
}
答案 0 :(得分:1)
如果该方法是通用的,则应包括所有泛型类型,包括TTypeConvertTo
。您可能不需要TTypeConvertFrom
作为泛型类型,因此请尝试:
public static List<TTypeConvertTo> ConvertFromEntityContext<TTypeConvertTo>
(this List<FromBaseModel> source)
如果您需要两种类型都是通用的(实际上看起来不太必要),您还必须将TTypeConvertFrom
约束为具有方法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();