Проверьте, реализует ли объект универсальный интерфейс для любого универсального типа
Я хочу проверить объект, чтобы увидеть, если он реализует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>
наследует.