2009-04-16 31 views
13

我正在嘗試編寫一個驗證來檢查是否可以將一個Object實例轉換爲變量類型。我有一個類型的實例,他們需要提供的對象類型。但類型可能會有所不同。這基本上是我想要做的。如何判斷一個實例是否屬於某個類型或任何派生類型

 Object obj = new object(); 
     Type typ = typeof(string); //just a sample, really typ is a variable 

     if(obj is typ) //this is wrong "is" does not work like this 
     { 
      //do something 
     } 

該類型對象本身具有IsSubClassOf和IsInstanceOfType方法。但是我真正想要檢查的是如果objtyp的實例或從typ派生的任何類別。

看起來像一個簡單的問題,但我似乎無法弄清楚。

回答

24

如何:

 

    MyObject myObject = new MyObject(); 
    Type type = myObject.GetType(); 

    if(typeof(YourBaseObject).IsAssignableFrom(type)) 
    { 
     //Do your casting. 
     YourBaseObject baseobject = (YourBaseObject)myObject; 
    } 

 

這就告訴你,如果該對象可強制轉換爲某些類型。

+1

是的,昨天晚上我發現了。不過謝謝。 – 2009-04-16 17:40:21

7

我認爲你需要重申你的條件,因爲如果objDerived的實例,它也將是Base的一個實例。並且typ.IsIstanceOfType(obj)將返回true。

class Base { } 
class Derived : Base { } 

object obj = new Derived(); 
Type typ = typeof(Base); 

type.IsInstanceOfType(obj); // = true 
type.IsAssignableFrom(obj.GetType()); // = true 
7

如果您正在使用實例的工作,你應該去爲Type.IsInstanceOfType

(返回)如果當前類型是在以O的 對象的繼承層次 ,或者如果 當前類型是一個接口,它支持。假,如果這些都不 條件的情況下,或者如果o是 nullNothingnullptrnull引用 (在Visual Basic中爲Nothing),或者如果 當前類型爲開放式泛型類型 (即ContainsGenericParameters 返回true)。 - MSDN

 Base b = new Base(); 
     Derived d = new Derived(); 
     if (typeof(Base).IsInstanceOfType(b)) 
      Console.WriteLine("b can come in."); // will be printed 
     if (typeof(Base).IsInstanceOfType(d)) 
      Console.WriteLine("d can come in."); // will be printed 

如果您正在使用類型對象的工作,那麼你應該看看Type.IsAssignableFrom

(返回)true,如果c和當前Type 表示相同的類型,或者 當前類型在繼承 層次結構中,或者如果當前類型 是c實現的接口,或者 如果c是泛型類型參數並且 當前類型代表t中的一個他約束的c。如果沒有 這些條件爲真,或者如果c爲 nullNothingnullptra null引用 (在Visual Basic中爲Nothing),則返回false。 - MSDN

相關問題