我定义了这个方法:
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的基础)
答案 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;
}