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

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

5 ответов

Решение

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

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

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

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

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

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

Вместо:

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

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

parentObject.GetType().IsInstanceOfType(inheritedObject)

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

Прямо из головы, вы также можете сделать:

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

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

Другие вопросы по тегам