我在使用 C# 泛型时遇到了麻烦:
MappingAdapter 是 FullMappingAdapter 和 LiteMappingAdapter 继承自/实现的通用抽象基类。
创建我的通用类会话的实例:
session = new Session<FullMappingAdapter>(
// ...
)
在会话中,决定我们是什么类型的会话:
// class declaration:
public class Session<T> : ISession
where T : MappingAdapter {
// ...
// method body:
T t = null;
if (t is FullMappingAdapter) {
// need parameter, cannot use where T : new() above
t = new FullMappingAdapter(someData) as T;
} else if (t is LiteMappingAdapter) {
t = new LiteMappingAdapter(someData) as T;
} else {
throw new NotSupportedException("Unknown Adapter specified, please fix.");
}
// ... more methods here ...
}
我总是抛出 NotSupportedException。此外,当在调试器中查看我的堆栈时,它在 t 的“类型”列中显示“FullMappingAdapter”,这是正确的,也是我所期望的。但是为什么“is”关键字也不能识别类型呢?
我究竟做错了什么?