2017-05-20 21 views
0

我想要一個包含B型 的變量但是上到varaible我要檢查它是否是B.類型檢查問題

的某些子類
public class A { 

    public System.Type acceptedType; 

    public B target; 

    public A(System.Type t1){ 
     this.acceptedType = t1; 
    } 

    public bool connect(B b1){ 
     if(b1 is this.acceptedType){ 
      this.target = b1; 
      return true; 
     } 
     return false; 
    } 
} 

然而實例分配一個值我得到:

意外符號「這個」,希望「型」

是「System.Type的」錯誤的變量類型還是我只是誤解了「是」運營商?

+1

'if(b1 is typeof(this.acceptedType))' – Mardoxx

回答

1

這是行不通的:

Foo fooObj = new Foo(); 
Foo fooObj2 = new Foo(); 
if (fooObj is fooObj2) // will not work 

爲什麼?因爲is需要一個類型,而不是一個實例。因此,這將工作:

if (fooObj is Foo) 

編輯

這裏是你如何能做到你想做的事:

Type fooType = typeof(String); 
if (fooType.IsAssignableFrom(typeof(int))) 
{ 
    Console.WriteLine("Will not show."); 
} 

if (fooType.IsAssignableFrom(typeof(string))) 
{ 
    Console.WriteLine("This will show."); 
} 

<== Fiddle With Me ==>

+0

我認爲變量'acceptedType'將包含一個類型而不僅僅是一個實例。如果'System.type'不是用於存儲類型的正確變量類型,那麼該變量應該是什麼類型? –

+0

@NicoS。請參閱編輯。 – CodingYoshi

1

我想我已經想通了。
相反的:

if(b1 is this.acceptedType) 

我現在使用:

if(this.acceptedType.IsInstanceOfType(b1)) 

而且似乎表現得如何我想它。
謝謝你指出我的錯誤在哪裏!