Я знаю is
и as
для instanceof
, но как насчет рефлексивного метода isInstance()?
Что такое эквивалент С# для Java 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)
Не уверен, что будет работать лучше. Я оставлю его кому-то еще, чтобы проверить:)