Java의 isInstance ()에 해당하는 C #은 무엇입니까?


답변:


52

obj.getClass().isInstance(otherObj)C # 의 Java에 해당하는 것은 다음과 같습니다.

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

Java와 C # 모두 ( vs 를 통해 )의 런타임 유형 객체 (Java java.lang.Class≣ C # System.Type)에서 작동 하지만 Java 는 객체를 인수로 사용하는 반면 C #은 다른 객체를 기대 합니다.obj.getClass().getType()isInstanceIsAssignableFromSystem.Type


1
참고 IsAssignableFrom은 객체가 아닌 Type을 취하므로 실제로 OtherObj.getType ()을 수행해야합니다.
FlySwat

3
감사합니다 Jon – 그리고 이것은 위키라는 것을 기억하십시오! 나는 내 실수를 바로 잡는 사람들을 분개하지 않는다.
Konrad Rudolph

1
흥미롭게도 ... 자바에서 JVM은 "instanceof"를 특별히 매우 빠르게 처리합니다. 이는 비정상적으로 키워드 인 이유를 설명 할 수 있습니다 (자바에 isAssignable 메소드도 있음).
Michael Neale

이 방법이 더 읽기 쉬운 "is"연산자보다 나은 이유는 무엇입니까?
Timothy Gonzalez

@TimothyGonzalez 뭔가 다른 일을하기 때문입니다. 두 변수 의 유형이 동일한 지 테스트합니다 . is대조적으로 유형 이름이 필요합니다. 이것이 OP가 원했던 것입니다 : Java의 isInstance. 다른 대답은 말도 안되는 찬성 투표 수에도 불구하고 잘못되었습니다.
Konrad Rudolph


39

달려, 사용 is당신은 주조 및 사용의 결과를 사용하지 않으려면 as당신이 할 경우. 당신은 거의 쓰고 싶지 않습니다.

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

대신에:

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

2

내 머리 꼭대기에서 다음과 같이 할 수도 있습니다.

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

어느 것이 더 잘 수행 될지 확실하지 않습니다. 나는 그것을 벤치마킹하기 위해 다른 사람에게 맡길 것입니다 :)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.