2011-04-20 102 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(); 
相關問題