我有一个名为AEntity的抽象类,这是我游戏中实体的基类。
我还有几个接口来"标记"实体,例如:
interface EffectEntity<T> where T : AEntity
{
void UpdateEffect();
}
在我的程序的一部分中,我有一个List<AEntity>
和一个名为add的方法。
此列表不能包含EffectEntity
。这是我的添加方法的代码:
if (Item is EffectEntity<T>)
{
throw new Exception("Cannot add an effectEntity to the still entities");
}
else allStillEntities.Add(Item);
这不会引发任何错误,但是当我将行if(Item is EffectEntiy<T>)
更改为if(default(T) is EffectEntity<T>)
时,它会发出警告 CS0148:"给定的表达式永远不会是提供的类型('EffectEntity<T>')
类型">
为什么会这样?难道它们不应该产生相同的结果吗?
是的,当然,在左侧使用Item
的版本可能更有效,但我仍然很好奇。
default(T)
将被null
,编译器知道这一点。null
不是EffectEntity<T>
的实例,所以它知道它会false
。
Item
可能是也可能不是null
、EffectEntity<T>
实例或某种其他类型的对象。