使用左侧带有默认值 (T) "is"运算符



我有一个名为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可能是也可能不是nullEffectEntity<T>实例或某种其他类型的对象。

相关内容

  • 没有找到相关文章

最新更新