我有一个“工厂”类,应该比较泛型类类型参数和返回一个对象的特定实例:比较类类型没有实例
public static class MyExceptionFactory<T> where T: System.Exception {
public static MyReturnObj Create() {
// return instance of MyReturnObj based on type of T
}
}
但我不能检查,如果如T是ArgumentNullException
因为T是一个类型参数,而不是变量
if(T is ArgumentNullException) // won't work
..而且,我无法检查T的类型
if(typeof(T) is ArgumentNullException)
因为智能感知告诉我,T是永远System.ArgumentNullException
(我假设,因为T是System.Exception
)
我怎么能解决这个问题?我必须通过一个System.Exception
的实例来检查它的类型或有任何其他方式通过类类型参数做呢?
但是,这就是'is'是。 :) – Atrotygma
@Atrotygma:该'is'操作者只能在像'如果(myObject的是SOMETYPE)'实例使用。 – Oliver
不,“is”关键字会检查某个类型的实例是否可以转换为另一种类型,而不会出现异常。所以首先,你需要一个实例来使用“是”开始。 – nvoigt