Есть ли способ определить, построен ли универсальный тип из определенного определения универсального типа?

У меня есть общий метод:

Func<IEnumerable<T>, bool> CreateFunction<T>()

гдеT может быть любым количеством разных типов. Этот метод делает кучу вещей, используя отражение и, еслиT являетсяIDictionaryнезависимо от словаряTKey а такжеTValue Мне нужно выполнить словарь конкретного кода.

Таким образом, метод может быть вызван:

var f = CreateFunction<string>();
var f0 = CreateFunction<SomePocoType>();
var f1 = CreateFunction<IDictionary<string,object>>();
var f2 = CreateFunction<Dictionary<string,object>>();
var f3 = CreateFunction<SomeDerivedDictionaryType<string,object>>();

и т.п.

Уточнение по @ ответу Энди

В конечном итоге я хочу знать, еслиT наследует от / ImplementsIDictionary даже еслиT сам по себеDictionary или какой-то другой тип, который происходит от этого интерфейса.

if(typeof(T) == typeof(IDictionary<,>)

не работает, потому чтоT является универсальным типом, а не определением универсального типа.

И не знаяTKey а такжеTValue (которые не известны во время компиляции) Я не могу сделать сравнение с каким-либо конкретным типом, о котором я знал бы до времени выполнения.

Единственное, что я придумал, - это посмотреть на имя типа или проверить его метод с отражением, найти методы, которые заставили бы меня поверить, что это словарь (то есть искатьContainsKey а такжеget_Item).

Есть ли простой способ сделать такое определение?

Ответы на вопрос(4)

Ваш ответ на вопрос