オブジェクトをテストして実装するかどうかを確認したいのですが、何がIDictionary<TKey,TValue>
何であるかは気にしませTKey
んTValue
。
Dictionary<,>
次のようなフレームワークの具体的なインスタンスであるかどうかをテストできます。
bool isDict = type.IsGenericType &&
(typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());
しかし、実装するものをテストする方法が思いつきませんIDictionary<,>
。この手法は、インターフェイスでは機能しません。IsAssignableFrom
一般的な基本型に対してテストすると false が返されますIDictionary<,>
が、具体的な型に対して機能するため、奇妙に思えます。
通常is
、何かがインターフェイスを実装しているかどうかをテストするために使用しますが、もちろん、これは特定の汎用インターフェイスをテストする場合にのみ機能します。または、共通の祖先インターフェイスをテストするだけですが、IList<>
やなどの他のジェネリック データ構造とは異なり、ジェネリックが継承するICollection<>
固有の非ジェネリック インターフェイスはありません。IDictionary<TKey,TValue>