在这种情况下,我有一个更多派生类型的列表和另一个派生类型较少的列表.为了避免派生较少的列表中的任意混乱,我写了一个foreach语句,检查列表中的每个元素是否属于更多派生类型,如果是,则将其移动到该元素到更多派生列表.这在这里演示:
namespace Test
{
class Tester
{
static void Method()
{
List<A> ListA = new List<A>();
List<B> ListB = new List<B>();
//populate the lists
foreach (A a in ListA)
if (a.GetType().ToString()=="Test.B")
{
ListA.Remove(a);
ListB.Add(a);
}
//Do stuff with the lists
}
}
class A
{
//stuff in class A
}
class B : A
{
//stuff in class B
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个编译器错误,说A类型的对象不能隐式转换为类型B,因为编译器不够聪明,无法实现转换的实例被测试为B类型为正,所以不应该首先是转换.有没有办法绕过这个问题?