【发布时间】:2011-04-27 11:48:29
【问题描述】:
我有一个列表定义为:
var Items = new List<IItem>();
现在有许多不同的类具有该接口,其中之一是 Consumable。 Consumable 类还重载了 == 运算符。现在我有以下代码并且无法正常工作:
if(item1 == item2)
{
//code...
}
这不起作用。我在 == 运算符重载中放置了一个断点,但它永远不会到达它。当我逐行调试时,item1和item2都是Consumable类型,GetType都返回Consumable。我什至试试这个代码:
var temp = item1.GetType();
var temp2 = item2.GetType();
if (temp == temp2)
{
//code...
}
并且这个相等的结果是正确的。现在如果我试试这个:
if(((Consumable)item1) == ((Consumable)item2))
{
//code...
}
这会触发 == 运算符重载中的断点。如果逐行调试显示它已经认为它们都是可消耗的,为什么我必须手动转换变量?是因为我从 IItems 列表中拉出它们吗?
【问题讨论】:
-
马克是对的;有关此设计决策的更多想法,请参阅我关于该主题的文章:blogs.msdn.com/b/ericlippert/archive/2009/04/09/…