Что такое эквивалент С# для Java isInstance()?

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

Ответ 1

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

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

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

Ответ 2

bool result = (obj is MyClass); // Better than using 'as'

Ответ 3

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

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

Вместо:

var bar = foo as Bar;
if(bar != null) {
    return bar;
}

Ответ 4

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

parentObject.GetType().IsInstanceOfType(inheritedObject)

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

Ответ 5

прямо с моей головы, вы также можете сделать:

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

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