[C#] is와 as 키워드의 차이점

C #에서 isas키워드 의 차이점을 알려주세요 .



답변

이다

is운영자 점검 목적은 특정 형태로 전송할 수있는 경우.

예:

if (someObject is StringBuilder) ...

같이

as운영자 시도는 특정 유형에 개체를 캐스팅하고, 실패하면 NULL을 반환합니다.

예:

StringBuilder b = someObject as StringBuilder;
if (b != null) ...

관련 항목 :

주조

캐스트 연산자의 시도는 특정 유형에 개체를 캐스팅하고 실패 할 경우 exeption를 throw합니다.

예:

StringBuilder b = (StringBuilder)someObject.


답변

ISAs 의 차이점은 ..

IS -Is 연산자는 지정된 유형을 가진 객체의 호환성을 확인하는 데 사용되며 결과를 부울 (True 또는 False)로 반환합니다.

AS -As 연산자는 객체를 주어진 유형 또는 클래스로 캐스팅하는 데 사용됩니다.

전의.

Student s = obj as Student;

다음과 같습니다.

Student s = obj is Student ? (Student)obj : (Student)null;


답변

isas키워드는 모두 C #의 형식 캐스팅에 사용됩니다.

두 키워드의 IL 코드를 살펴보면 쉽게 차이를 알 수 있습니다.

C # 코드 :

BaseClass baseclassInstance = new DerivedClass();
DerivedClass derivedclassInstance;

if (baseclassInstance is DerivedClass)
{
   derivedclassInstance = (DerivedClass)baseclassInstance;
   // do something on derivedclassInstance
}


derivedclassInstance = baseclassInstance as DerivedClass;

if (derivedclassInstance != null)
{
   // do something on derivedclassInstance
}

IL 코드 (위의 C # 코드는 첨부 된 이미지에 있음) :

위의 C # 코드에 대한 IL 코드is키워드 사용을
위한 IL 코드 에는 isinstacastclass.
그러나 as키워드 사용을 위한 IL 코드 에는 isinsta.

위에서 언급 한 사용법에서 is키워드가 사용되는 곳에서는 두 번의 타입 캐스트가 발생하고 키워드가 사용되는 곳에서는 하나의 타입 캐스트 만 발생 as합니다.

참고 : is키워드를 사용하여 일부 조건을 확인하고 typecast 결과에 관심이없는 경우 typecast가 하나만 있습니다.

if (baseclassInstance is DerivedClass)
{
   // do something based on the condition check.
}

is그리고 as키워드는 필요에 따라 사용됩니다.


답변

is 키워드는 왼쪽에있는 값이 오른쪽에있는 유형의 인스턴스인지 확인합니다. 예를 들면 :

if(obj is string)
{
     ...
}

이 경우 obj를 문자열로 가져 오려면 추가 명시 적 캐스트를 사용해야합니다.

as 키워드는 nullable 형식을 캐스팅하는 데 사용됩니다. 지정된 값이 지정된 유형의 인스턴스가 아닌 경우 null이 반환됩니다. 예를 들면 :

string str = obj as string;
if(str != null)
{
     ...
}


답변

나는 말하고 싶다 : MSDN 온라인을 읽으십시오.

is 연산자는 객체가 주어진 유형과 호환되는지 여부를 확인하고 평가 결과는 부울 (true 또는 false)입니다.

as 연산자는 예외를 발생시키지 않습니다.


답변

캐스트 인 Is operator는 성공하면 true를 반환합니다. 캐스트가 실패하면 false를 반환합니다. 그것으로 변환 된 변수를 캡처 할 수 없습니다. 이 연산자는 if 문과 표현식에서 유형을 확인할 때 가장 유용합니다. is-cast는 결과 변수가 더 이상 사용되지 않는 경우에만 이상적입니다.

캐스트 그대로입니다. 이를 통해 성능을 얻고 캐스트가 유효하지 않을 때 예외를 피할 수 있습니다. 캐스트가 불가능한 경우 Null이 반환됩니다. 참조 유형의 경우 캐스트가 권장됩니다. 빠르고 안전하며 결과 변수를 null에 대해 테스트 한 다음 사용할 수 있습니다. 이것은 여분의 캐스트를 제거합니다


답변

  1. is 연산자는 객체가 주어진 유형과 호환되는지 여부를 확인합니다. 결과는 true 또는 false입니다.
  2. 한 유형을 다른 유형으로 캐스트하는 데 사용되며 변환 실패시 예외 발생을 제외하고는 null이 발생합니다. 잘 이해하려면 링크를 참조하십시오 https://blogs.msdn.microsoft.com/prakasht/2013/04/23/difference-between-direct-casting-is-and-as-operator-in-c/