2015-03-02 93 views
0

我有3類:獲取子類類型

class O 
{ 
} 

class A : O 
{ 
} 

class B : A 
{ 
} 

當我打電話給我的代碼:

List<O> myList = new List<O>(); 
myList.Add(new A()); 
myList.Add(new B()); 

foreach (O obj in myList) 
{ 
    if (obj is A) 
    { 
     // do something 
    } 
    else if (obj is B) 
    { 
     //do something 
    } 
} 

但是我意識到if (obj is A)將被評估爲true即使我obj是的class B。有沒有辦法來編寫聲明,以便它的計算結果爲true,當且僅當objclass B

+2

'obj.GetType()== typeof運算(B)' – abatishchev 2015-03-02 05:07:37

+1

只是一個想法鍛鍊,重新排列條件句。最具體到最不具體的。 – 2015-03-02 05:17:56

回答

0

有兩種方法GetTypetypeof

的GetType是上對象的方法。它提供了一個Type對象,其中一個 指示對象實例的派生類型最多。

的typeof返回類型的對象。它通常用作參數或作爲變量或字段使用。 typeof運算符是一個表達式的一部分 獲取指針類型的一類或值類型

嘗試這樣

if(obj.GetType() == typeof(A)) // do something 
else if(obj.GetType() == typeof(B)) //do something 
+0

*這個*程序?您可能引用http://www.dotnetperls.com/gettype – abatishchev 2015-03-02 05:14:28

3

你爲什麼不在基類中定義一個虛函數和在派生類型中重寫它,在不同情況下做你需要的東西?

class O { 
    public virtual void DoSomething() { 
     // do smtgh in the 'O' case 
    } 
} 

class A : O { 
    public override void DoSomething() { 
     // do smtgh in the 'A' case 
    } 
} 

class B : A { 
    public override void DoSomething() { 
     // do smtgh in the 'B' case 
    } 
} 

然後你的循環變得

foreach (O obj in myList) { 
    obj.DoSomething(); 
}