【发布时间】:2018-08-01 15:45:42
【问题描述】:
在我的代码中,我有一个对象:
object obj = ...
我知道的类型是 MyListType,其中 MyListType 是 IList 的子类,T 是 MyAbstractClass 的子类。 MyListType 的类型参数受到约束,因此它始终是 MyAbstractClass 的子类。
但是,尝试强制转换 obj
MyListType<MyAbstractClass> myList = (MyListType<MyAbstractClass>)obj;
给出运行时错误。
我试图定义一个显式的操作符
public static explicit operator MyListType<MyAbstractClass>(MyListType<T> list)
{
MyListType<MyAbstractClass> newList = new MyListType<MyAbstractClass>();
foreach(T t in list)
newList.Add((MyAbstractClass) t);
return newList;
}
但是,由于 obj 是一个对象,而不是 MyListType,因此强制转换不会使用此运算符。是否有成功执行此演员的解决方法?
我查看了this question,但他们的列表属于未知类型。
【问题讨论】:
-
如果
MyListType<MyAbstractClass> myList = (MyListType<MyAbstractClass>)obj;给出运行时错误,那么obj不是您认为的类型! -
能否编辑您的问题并粘贴类定义?
-
类(和
IList<T>)是不变的,所以MyList<Subclass>不是MyList<MyAbstractClass>的实例。不过,您可以将其转换为IEnumerable<MyAbstractClass>。 -
你试过
Convert.ChangeType(obj,typeof(MyListType<MyAbstractClass>))吗? -
@Lee 行得通!我已将其添加为这篇文章的答案。