EntityBase是基类
IBLLBase<T> where T:EntityBase,new() 是基类接口
Test是实体类
TestBLL是接口实现类
下面是某个类里面的的索引
public IBLLBase<dynamic> this[string name]
{
get
{
switch (name.ToLower())
{
case"test":
return (IBLLBase<Test>)new TestBLL();
}
return null;
}
}
错误:Test无法转换成dynamic类型。谁知道怎么做才能把Test转换成dynamic?
因为你的IBLLBase<T>不支持协变,而且你的T限制了只能是EntityBase,因此答案就是“不能”。话说我很好奇你这么做意义很在,感觉除了测试,没什么用。
class Base { } //协变定义,流畅转换成子类型 interface IBase<out T> where T : Base, new() { void SomeMethod(); } class Derived:Base { } class Implementation : IBase<Derived> { public void SomeMethod() { } } class DoSomething { //dynamic 不能作为类型参数 public IBase<Base> this[string name] { get { if (name == "") { return new Implementation(); } else return null; } } }
谢谢 这个可以解决我的问题,但是我想问下。
interface IBase<out T> where T : Base, new() { void SomeMethod(); List<T> Query(); }
这样子List<T>会报错。
不用了,我解决了。