@EnocNRoll - ответ Ананды Гопал интересен, но если экземпляр не создается заранее или вы хотите проверить с помощью определения общего типа, я бы предложил этот метод:
public static bool TypeIs(this Type x, Type d) {
if(null==d) {
return false;
}
for(var c = x; null!=c; c=c.BaseType) {
var a = c.GetInterfaces();
for(var i = a.Length; i-->=0;) {
var t = i<0 ? c : a[i];
if(t==d||t.IsGenericType&&t.GetGenericTypeDefinition()==d) {
return true;
}
}
}
return false;
}
и использовать его как:
var b = typeof(char[]).TypeIs(typeof(IList<>)); // true
Существует четыре условных случая, когда оба t
(для тестирования) и d
являются общими типами, а два случая охватываются t==d
, которые являются (1) ни t
, ни d
не являются общим определением или (2), оба из них являются общими определениями . В остальных случаях одним из них является общее определение, только если d
уже является общим определением, мы имеем возможность сказать , а t
- d
, но не наоборот.
Он должен работать с произвольными классами или интерфейсами, которые вы хотите протестировать, и возвращает то, что, как если бы вы протестировали экземпляр этого типа с помощью оператора is
.
Быстрый Google показывает:
Или, возможно, лучшая фиксация:
Для последних версий zsh вы можете просто добавить:
autoload -U select-word-style
select-word-style bash
в свой zshrc, как описано в zshcontrib (1) .
.