背景:我编写了一个通用方法,该方法从集合中查找并返回由通用类型参数指定的特定类型的对象。
我发现,由于某种原因,即使对象的类型和作为通用类型参数传递的类型相同,“ is”运算符也会返回“ false”。
public abstract class AbstractComponent { }
public class Component : AbstractComponent { }
//Collection
public List<AbstractComponent> Components = new List<AbstractComponent> { new Component() };
//Method
public ComponentType GetComponent<ComponentType>()
{
foreach (var component in Components)
{
var type = component.GetType();
var eq = type is ComponentType; // false
var eq2 = type == typeof(ComponentType); // true
var eq3 = Type.Equals(type, typeof(ComponentType)); // true
//Updated
var eq4 = component is ComponentType; // also true, thanks for that
}
return default(ComponentType);
}
//Method invocation
var Component = GetComponent<Component>();
我将使用其他方式,但是我想知道为什么正是这种行为发生。有人可以解释一下吗?
答案 0 :(得分:1)
type
不是ComponentType
的实例,它是Type
的实例,因此is
将不起作用。
例如,您想IsAssignableFrom
typeof(ComponentType).IsAssignableFrom(type)