1

我认为以下代码段应该可以工作但失败了。我也尝试过 IsInstanceOfType 。

Assert.IsTrue(typeof(Predicate<>).IsAssignableFrom(typeof(Predicate<int>)), "No predicate match!");

我的断言错了吗?

4

2 回答 2

3

不,那是行不通的——你永远不可能有 open 类型的值,所以这行不通。

听起来您可能想要Type.GetGenericTypeDefinition

if (type.IsGenericType &&
    type.GetGenericTypeDefinition() == typeof(Predicate<>))
{
    ...
}
于 2012-09-24T20:40:31.803 回答
0

我不认为这种方法应该是这样工作的。

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
于 2012-09-24T20:54:51.243 回答