2011-04-20 91 views
2

由于编译器抱怨,我在做一些非法的事情,但我不知道该怎么做。基本上我想将一种类型的列表转换为另一种类型的列表。任何帮助非常感谢。这里是我的扩展方法:将通用类型转换为另一种通用类型扩展方法

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

如果该方法是通用的,它应该包括所有通用类型,包括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();