Что такое 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
объект.
Зависит, использовать 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)
Не уверен, что будет лучше. Я оставлю это кому-то еще для сравнения:)