"是"和"IsAssignableFrom"C#之间的区别

Hai*_*rom 4 c# reflection interface

有什么区别:

typeof(IInterface).IsAssignableFrom(typeof(Class));
Run Code Online (Sandbox Code Playgroud)

typeof(Class) is IInterface
Run Code Online (Sandbox Code Playgroud)

编辑:对于上下文,我的函数是这样的:

public static List<T> GetAllInstancesOfType<T>() where T:Entity
{
  List<T> l = new List<T>();

  if (typeof(IMyInterface).IsAssignableFrom(typeof(T)) //or (typeof(T) is IMyInterface)
     foreach(Entity e in List1) if (e is T) l.Add(e as T);

  else foreach (Entity e in List2) if (e is T) l.Add(e as T);

  return l;
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 13

它们看起来很相似,但在概念上却非常不同.前者回答了这个问题:"如果我有这种类型的变量,我可以为其分配该类型的吗?"

后者回答了这个问题"这个实际值可以通过参考或装箱转换转换成这种类型吗?"

在后一种情况下,实际对象是类型Type的对象,而不是类型的对象Class.确保您了解以下两者之间的区别:

Type t = typeof(Class);
Class c = new Class();
bool b1 = t is IInterface;
bool b2 = c is IInterface;
Run Code Online (Sandbox Code Playgroud)

第一个问"可以将Type对象转换为接口吗?" 第二个问"可以将Class对象转换为界面吗?"