2009-04-16 20 views
13

türünde bir örnek olup olmadığını nasıl anlatacağım Bir Nesne örneğinin bir değişken türüne yayınlanabileceğini kontrol etmek için bir doğrulama yazmaya çalışıyorum. Sağlamanız gereken nesne türü için bir Type örneğim var. Ancak Tip değişebilir. Bu temelde yapmak istediğim şey.Örneğin, belirli bir Tür veya türetilmiş türden

 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 
     } 

tipi nesnesi, IsSubClassOf ve IsInstanceOfType yöntemleri vardır. Ama gerçekten kontrol etmek istediğim, obj nesnesinin tip veya yazımından türetilen herhangi bir sınıfın türündedir.

Basit bir soru gibi görünüyor, ancak bunu anlayamıyorum. Bu konuda

cevap

24

Nasıl:

bu nesne belirli tipine dökülebilir, bu size söyler
 

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

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

 

.

+1

Evet. Daha sonra dün gece buldum. Yine de teşekkürler. –

7

Koşullarınızı yeniden belirtmeniz gerektiğini düşünüyorum, çünkü obj, Derived örneğidir, ayrıca Base örneğidir. Ve typ.IsIstanceOfType(obj), doğru olarak döndürecektir. Eğer Örnekleri ile çalışıyorsanız

class Base { } 
class Derived : Base { } 

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

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

, sen için devam edilmelidir Type.IsInstanceOfType

(İade) geçerli Tipi eğer o temsil nesnenin miras hiyerarşisinde , ya true geçerli Tür, 'un desteklediği bir arabirimdir. Yanlış bu koşulların ne durumda ise veya o ise nullNothingnullptra null başvuru (Visual Basic hiçbir şey) ya akım tipi bir açık genel tür (yani, gerçek döndüren ContainsGenericParameters) ise. - Eğer Tip nesnelerle çalışıyorsanız 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 

, o zaman c ve mevcut Tip aynı tür temsil true Type.IsAssignableFrom

(İade) bakmak veya eğer gerektiğini akım tipi c kalıtım hiyerarşisinde, ya da mevcut Tip c, isterse c genel tür parametresi ve ise bir arabirim ise, akım Tip t birini temsil eder kısıtlamaları c. bu koşulların hiçbiri true değilse veya c nullNothingnullptra null başvurusu (Visual Basic'te hiçbir şey) yoksa false. - MSDN

İlgili konular