日期:2014-05-18  浏览次数:20705 次

泛型 错误 无法将类型 “class1<type1>” 转换为“class1<typeBase>”
我的函数
public void Myfunction(class1<typeBase> 参数)
{
...
}
希望传入参数的类型class1<type1>
type1继承于typeBase
如何做到?

如果直接传会报错!
class1<type1> 参数1;
....

Myfunction(参数1);

编译报错
泛型 错误 无法将类型 “class1<type1>” 转换为“class1<typeBase>”

------解决方案--------------------
4.0以下的貌似做不到,4.0或其以上的可以通过定义<in T>实现
------解决方案--------------------
public void Myfunction(class1<typeBase> 参数)
{
...
}
=>
public void Myfunction<T>(class1<T> 参数) where T : typeBase
{
...
}

------解决方案--------------------
探讨
4.0以下的貌似做不到,4.0或其以上的可以通过定义<in T>实现

------解决方案--------------------
把class1<type1>整体当做一个类了,应该是

public void Myfunction<T>(T myclass)

限定T是typeBase
------解决方案--------------------
探讨

引用:
4.0以下的貌似做不到,4.0或其以上的可以通过定义<in T>实现

4.0也做不到。

------解决方案--------------------
探讨
引用:

引用:
4.0以下的貌似做不到,4.0或其以上的可以通过定义<in T>实现

4.0也做不到。


必须做不到。

因为class1<type1>和class1<typeBase>没有任何关系。

------解决方案--------------------
List<type1> thelist = ...
List<typeBase> list = thelist.Select(x => x as typeBase).ToList();
------解决方案--------------------
探讨

引用:
引用:

引用:
4.0以下的貌似做不到,4.0或其以上的可以通过定义<in T>实现

4.0也做不到。


必须做不到。

因为class1<type1>和class1<typeBase>没有任何关系。


做不到的原因不是这个,是因为C# 4.0只能支持泛型和委托的协变,不支持类。