【问题标题】:Convert generic type to another generic type extension method将泛型类型转换为另一个泛型类型扩展方法
【发布时间】:2011-08-09 08:15:54
【问题描述】:

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

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;
    }

【问题讨论】:

    标签: generics methods types


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多