我有一个实现Eater
和IComparable
的类IComparable<Eater>
。然后,我生成一个类型为IComparable[]
的数组。现在,由于Eater
实现了IComparable
,因此我认为以下转换有效:
Eater[] = (Eater[])(new IComparable[] {1,2,3})
但是,此操作失败并显示InvalidCastException
-为什么以及如何修改代码以使其变为可能?
答案 0 :(得分:2)
猫是动物。但并非所有动物都是猫。
或者为您:
食者是一个IComparable。但是并非所有实现IComparable的类都是Eater。
new IComparable[] {1,2,3}
所做的是创建和创建Int32数组(它也实现了IComparable。但是Int32不是Eater。)
类似的东西应该可以工作:
Eater[] = (Eater[])(new IComparable[] {new Eater(1),new Eater(2), new Eater(3)})
或
Eater[] = new Eater[] {new Eater(1),new Eater(2), new Eater(3)}
答案 1 :(得分:-1)
如果Eater
实现了IComparable
,则意味着您可以将Eater
强制转换为ICompatable
。
但是,当您将IComparable
投射到Eater
时,您正尝试以另一种方式进行操作。
您可以像IComparable[] arr = new Eater[] { 1, 2, 3}