as / is
as
클래스를 캐스팅 연산자를 통해 형변환을 하면 오류가 발생한다. 이 문제를 해결하기 위해 as 연산자가 추가되었다.
Parent parent = new Parent();
Child child = parent as Child;
as는 형변환이 가능하면 지정된 타입의 인스턴스 값을 반환하고 불가능하면 null을 반환한다.
다만 as 연산자는 참조형 변수에만 적용이 가능하며 참조형 타입으로의 체크만 가능하다. 따라서 다음과 같은 경우 오류가 발생한다.
int n = 10;
if ((n as string) != null) // 컴파일 오류 발생
{
~
}
is
as가 형변환 결과값을 반환한다면 is 형변환 가능성 여부를 결과값(bool)로 반환한다.
즉 as 와 is 의 사용 기준이 명확하다.
-
as : 형변환된 인스턴스가 필요할 때
-
is : 인스턴스는 필요없고 가능성 여부만 필요할 때
그리고 as와 달리 is는 값 형식에도 사용이 가능하다. 다만 int 타입의 string으로 변환 같은 경우 is로 확인할 때는 오류는 아니지만 경고는 발생한다.
위 코드는 is를 사용하는게 적절한 경우이다.
if (n is string) { ~ }