我认为以下代码段应该可以工作但失败了。我也尝试过 IsInstanceOfType 。
Assert.IsTrue(typeof(Predicate<>).IsAssignableFrom(typeof(Predicate<int>)), "No predicate match!");
我的断言错了吗?
不,那是行不通的——你永远不可能有 open 类型的值,所以这行不通。
听起来您可能想要Type.GetGenericTypeDefinition
:
if (type.IsGenericType &&
type.GetGenericTypeDefinition() == typeof(Predicate<>))
{
...
}
我不认为这种方法应该是这样工作的。
A
对于type和type in的关系B
:
A.IsAssignableFrom(B) == true
,A
是 的基类B
, 或者A
是 的接口B
有一些像:
public class Animal { }
public class Dog : Animal { }
以便:
typeof(Animal).IsAssignableFrom(typeof(Dog)) == true;
// you can do
Dog spot = new Dog();
Animal a = spot; // assigned an Animal from a Dog
// but not
Animal b = new Animal();
Dog spike = b; // compiler complains