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



Я знаю is и as на instanceof, а как же рефлексивный isInstance() способ?

813   5  

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() vs .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;
}

просто с верхней части моей головы, вы могли бы также сделать:

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

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

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

parentObject.GetType().IsInstanceOfType(inheritedObject)

посмотреть тип.IsInstanceOfType описание в MSDN.

Comments

    Ничего не найдено.