通用方法和转换:如何定义类型1可转换为类型2

时间:2017-02-13 14:15:36

标签: c# .net generics

我定义了这个方法:

public static List<T2> ConvertList<T1, T2>(List<T1> param) where T1:class where T2:class
{
    List<T2> result = new List<T2>();

    foreach (T1 p in param)
        result.Add((T2)p);

    return result;
}

用于将类型1的列表转换为类型2的列表。

不幸的是我忘了,C#编译器在这个阶段不能说T1可以转换为T2,所以它会抛出错误:

  

错误CS0030:无法将T1类型转换为T2

有人可以指导我如何正确地做到这一点吗?我现在需要这个方法只将自定义类的列表转换为object的列表,因此在.NET中,所有内容都来自object它应该有效。

基本上我所期望的是一些语法告诉编译器T2(object)是T1(MyClass)的基础,所以类似于:

public static List<T2> ConvertList<T1, T2>(List<T1> param) where T2: base of T1

(... 其中T2:T1的基础

1 个答案:

答案 0 :(得分:8)

您可以在通用参数中指定它:

public static List<T2> ConvertList<T1, T2>(List<T1> param) 
                 where T1:class,T2 
                 where T2:class
{
    List<T2> result = new List<T2>();

    foreach (T1 p in param)
        result.Add((T2)p);

    return result;
}