2009-04-16 37 views
13

Tôi đang cố gắng viết một xác nhận hợp lệ để kiểm tra xem một cá thể Object có thể được truyền đến một kiểu biến hay không. Tôi có một thể loại Type cho loại đối tượng mà họ cần cung cấp. Nhưng Loại có thể thay đổi. Đây là những gì tôi muốn làm.Làm thế nào để biết một thể hiện là một Loại nhất định hay bất kỳ kiểu bắt nguồn nào

 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 
     } 

Chính đối tượng kiểu có phương pháp IsSubClassOf và IsInstanceOfType. Nhưng điều tôi thực sự muốn kiểm tra là nếu obj là một ví dụ của , hãy nhập hoặc bất kỳ lớp nào có nguồn gốc từ typ.

Có vẻ như một câu hỏi đơn giản, nhưng tôi không thể hình dung ra được.

Trả lời

24

Làm thế nào về điều này:

 

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

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

 

này cho quý vị nếu đối tượng có thể được đúc để loại nhất định.

+1

Vâng tôi thấy rằng sau đêm qua. Cảm ơn mặc dù. –

7

Tôi nghĩ bạn cần phải nghỉ ngơi các điều kiện của mình, bởi vì nếu obj là một phiên bản của Derived, nó cũng sẽ là một phiên bản Base. Và typ.IsIstanceOfType(obj) sẽ trả về true.

class Base { } 
class Derived : Base { } 

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

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

Nếu bạn đang làm việc với Instances, bạn nên đi cho Type.IsInstanceOfType

(Returns) true nếu loại hiện nay là trong hệ thống phân cấp thừa kế của đối tượng đại diện bởi o, hoặc nếu Loại hiện tại là giao diện có hỗ trợ . false nếu không ai trong số những điều kiện là trường hợp, hoặc nếu o là nullNothingnullptra null tham chiếu (Không có gì trong Visual Basic), hoặc nếu Loại hiện nay là một mở generic loại (có nghĩa là, ContainsGenericParameters trả về 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 

Nếu bạn đang làm việc với loại đối tượng, sau đó bạn nên xem xét Type.IsAssignableFrom

(Returns) đúng nếu c và Type hiện đại diện cho cùng loại, hoặc nếu Loại hiện tại là Loại hiện tại nằm trong phân cấp thừa kế của c hoặc nếu Kiểu hiện tại là giao diện c thực hiện hoặc nếu c là thông số loại chung và Loại hiện tại đại diện cho một trong t anh ta ràng buộc của c. false nếu không có các điều kiện này là đúng hoặc nếu c là nullNothingnullptra tham chiếu null (Không có gì trong Visual Basic). - MSDN

Các vấn đề liên quan