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」キーワードもタイプを認識しないのでしょうか?
私は何を間違っていますか?