[C#] 인스턴스가 유형인지 확인

이것을 사용하여 c의 인스턴스 인지 확인하십시오 TForm.

c.GetType().Name.CompareTo("TForm") == 0

string에 매개 변수로 사용하는 것 외에도 더 안전한 유형의 안전한 방법 이 CompareTo()있습니까?



답변

여기에 다른 대답은 두 가지 의미가 있습니다.

인스턴스인지 여부는 확인하려면 정확한 입력 한 후

if (c.GetType() == typeof(TForm))

갈 길입니다.

서브 클래스c 의 인스턴스 인지 TForm 서브 클래스 인지 알고 싶다면 is/ 를 사용하십시오 as.

if (c is TForm)

또는

TForm form = c as TForm;
if (form != null)

이러한 행동 중 실제로 원하는 행동이 무엇인지 마음에 새기십시오.


답변

if(c is TFrom)
{
   // Do Stuff
}

당신이 사용하려는 경우 또는 cA와 TForm다음 예를 사용합니다 :

var tForm = c as TForm;
if(tForm != null)
{
   // c is of type TForm
}

두 번째 예 c는 유형이 TForm한 번 인지 확인하기 만하면됩니다 . 있는지이 경우 Whereis 당신이 선택하면 c유형 인 TForm다음 캐스트의 CLR은 별도의 검사를 받는다. 여기 참조 입니다.

편집 : Jon Skeet의 도난

에서 상속하는 클래스 c가 아닌지 확인 하려면 다음을 사용하십시오.TFormTForm

if(c.GetType() == typeof(TForm))
{
   // Do stuff cause c is of type TForm and nothing else
}


답변

예, “is”키워드 :

if (c is TForm)
{
    ...
}

MSDN에 대한 자세한 내용을 참조하십시오 : http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx

객체가 주어진 유형과 호환되는지 확인합니다. 예를 들어 객체가 다음과 같은 문자열 유형과 호환되는지 확인할 수 있습니다.


답변

또한 같은 맥락에서

Type.IsAssignableFrom(Type c)

“c와 현재 유형이 동일한 유형을 나타내거나 현재 유형이 c의 상속 계층 구조에 있거나 현재 유형이 c가 구현하는 인터페이스이거나 c가 일반 유형 매개 변수이고 현재 유형 인 경우 참 “c의 제약 조건 중 하나를 나타냅니다.”

여기에서 : http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx


답변

c를 TForm으로 사용하려는 경우 다른 답변보다 약간 컴팩트합니다.

if(c is TForm form){
    form.DoStuff();
}


답변

다음을 시도하십시오

if (c is TForm) {
 ...
}


답변

다른 사람들이 언급했듯이 “is”키워드. 그러나 나중에 해당 유형으로 캐스트하려는 경우입니다.

TForm t = (TForm)c;

그런 다음 “as”키워드를 사용해야합니다.

예 : TForm t = c as TForm.

그럼 당신은 확인할 수 있습니다

if(t != null)
{
 // put TForm specific stuff here
}

중복 검사이므로 그대로 사용하지 마십시오.