Что такое C # эквивалент Java isInstance ()? - PullRequest
85 голосов
/ 12 ноября 2008

Я знаю is и as для instanceof, но как насчет рефлексивного метода isInstance () ?

Ответы [ 5 ]

180 голосов
/ 12 ноября 2008
bool result = (obj is MyClass); // Better than using 'as'
51 голосов
/ 12 ноября 2008

Эквивалент obj.getClass().isInstance(otherObj) Java в C # выглядит следующим образом:

bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());

Обратите внимание, что хотя Java и C # работают с объектом типа времени выполнения (Java java.lang.Class ≣ C # System.Type) obj (через .getClass() vs .getType()), Java isInstance принимает объект в качестве аргумента, тогда как C # IsAssignableFrom ожидает еще один System.Type объект.

39 голосов
/ 12 ноября 2008

Зависит, используйте is, если вы не хотите использовать результат приведения, и используйте as, если вы это делаете. Вы вряд ли когда-нибудь захотите написать:

if(foo is Bar) {
    return (Bar)foo;
}

Вместо:

var bar = foo as Bar;
if(bar != null) {
    return bar;
}
2 голосов
/ 28 декабря 2015

Код ниже может быть альтернативой IsAssignableFrom.

parentObject.GetType().IsInstanceOfType(inheritedObject)

См. Type.IsInstanceOfType описание в MSDN.

2 голосов
/ 12 ноября 2008

чуть выше моей головы, вы также можете сделать:

bool result = ((obj as MyClass) != null)

Не уверен, что будет лучше. Я оставлю это кому-то еще для сравнения:)

...