我的函数
public void Myfunction(class1<typeBase> 参数)
{
...
}
希望传入参数的类型class1<type1>
type1继承于typeBase
如何做到?如果直接传会报错!
class1<type1> 参数1;
....Myfunction(参数1);编译报错
泛型 错误 无法将类型 “class1<type1>” 转换为“class1<typeBase>”
public void Myfunction(class1<typeBase> 参数)
{
...
}
希望传入参数的类型class1<type1>
type1继承于typeBase
如何做到?如果直接传会报错!
class1<type1> 参数1;
....Myfunction(参数1);编译报错
泛型 错误 无法将类型 “class1<type1>” 转换为“class1<typeBase>”
{
...
}
=>
public void Myfunction<T>(class1<T> 参数) where T : typeBase
{
...
}
必须做不到。因为class1<type1>和class1<typeBase>没有任何关系。
{
...
}
不行,在函数内部进行对比时出现同样问题
函数内部,我引用了一个list<typeBase>类型,typeBaseList
typeBaseList的函数不能调用参数!
List<typeBase> list = thelist.Select(x => x as typeBase).ToList();
我用的是2005, 2008的select不可用
{
...
}
不行,在函数内部进行对比时出现同样问题
函数内部,我引用了一个List<typeBase>类型,typeBaseList
typeBaseList的函数不能调用参数!
具体调用为
if(!this.typeBaseList.Contains(参数))....
我用的是2005
List<typeBase> list = new List<typeBase>();
foreach (type1 item in thelist)
{
list.Add(item as typeBase);
}
...
Myfunction<T>函数所在的Class也做成泛型吧
用协变来说的话,我感觉应该这么解释:class<type>和class1<typeBase>也根本没有关系啊,两种类型。
就像ClassA和ClassB一样。转换什么的,还是像版主那么转换吧。
最好写个T ConvertTo<T,S>(S in)这类的
我不能把Myfunction<T>函数所在的Class也做成泛型 ,因为不可能呀
{
...
}
不行,在函数内部进行对比时出现同样问题
函数内部,我引用了一个List<typeBase>类型,typeBaseList
typeBaseList的函数不能调用参数!
具体调用为
if(!this.typeBaseList.Contains(参数))....
我用的是2005如何实现?
!this.typeBaseList.Contains(参数)
//this.typeBaseList不仅包含type1,还包含type2
public void Myfunction<T>(class1<T> 参数) where T : typeBase
{
...
}
不行,在函数内部进行对比时出现同样问题
函数内部,我引用了一个List<class1<typeBase>>类型,BaseList
BaseList的函数不能调用参数!
具体调用为
if(!this.BaseList.Contains(参数))....
我用的是2005如何实现?
!this.BaseList.Contains(参数)
//this.BaseList不仅包含Class1<type1>,还包含Class1<type2>
public void Myfunction<T>(class1<T> 参数) where T : typeBase
{
...
}
不行,在函数内部进行对比时出现同样问题
函数内部,我引用了一个List<Class1<typeBase>>类型,typeBaseList
typeBaseList的函数不能调用参数!
具体调用为
if(!this.typeBaseList.Contains(参数))....
我用的是2005如何实现?
!this.typeBaseList.Contains(参数)
//this.typeBaseList不仅包含Class1<type1>,还包含Class1<type2>
但是List<Type>没有继承List<typeBase>啊如果typeBase有两个子类 Type 和Type2, 就可以看出问题所在了呗。
一个 List<typeBase> baselist= new List<typeBase>();
baseClass.Add(new Type1()); baseClass.Add(new Type2());
这让baseList怎么往List<Type>上联系啊。所以我的理解是,即使Type与typeBase有继承关系,但是这不说明List<Type>与List<typeBase>有继承关系啊。
List<class1<typeBase>> list = new List<class1<typeBase>>();
foreach (class<type1> item in thelist)
{
list.Add(item as class<typeBase>);
}
---------------
item as class<typeBase> 会返回什么?如果成功,应该用他就可以了吧
{
....
}
语义上有一个基本类Class1<typeBase>但是实际上不是如此吗?
因为list是泛型List<class1<typeBase>> 当然需要转换
既然要返回List<typeBase>把type1转换成typeBase即可
也就是说:
泛型类是不变的。也就是说,如果输入参数指定 List<BaseClass>,则当您试图提供 List<DerivedClass> 时,将会发生编译时错误。