2010-06-17 30 views
7

Tôi muốn thực hiện một phép thuật rõ ràng bằng cách sử dụng thông tin Loại từ một mảng này đến mảng khác có liên quan đến kế thừa. Vấn đề của tôi là khi đang sử dụng thông tin Loại trình biên dịch sẽ gửi lỗi, nhưng yêu cầu của tôi là tự động truyền dựa trên thông tin Loại được cung cấp.Dynamic Casting dựa trên thông tin Loại

Xin vui lòng giúp

class Program 
{ 
    static void Main(string[] args) 
    { 
     Parent[] objParent; 
     Child[] objChild = new Child[] { new Child(), new Child() }; 
     Type TypParent = typeof(Parent); 

     //Works when i mention the class name 
     objParent = (Parent[])objChild; 

     //Doesn't work if I mention Type info 
     objParent = (TypParent[])objChild; 
    } 
} 

class Parent 
{ 
} 

class Child : Parent 
{ 
} 

Trả lời

12

Cách duy nhất bạn có thể cast động là với sự phản ánh. Tất nhiên, bạn không thể truyền objChild đến TypParent[] - bạn đang cố gắng truyền mảng Child tới một mảng Type.

Bạn có thể sử dụng phương pháp .Cast<T>() gọi với suy nghĩ để đạt được điều này:

MethodInfo castMethod = this.GetType().GetMethod("Cast").MakeGenericMethod(typeParent); 
object castedObject = castMethod.Invoke(null, new object[] { objChild }); 

Nếu bạn cần một với nhiều loại phi IEnumerable, làm cho một phần mở rộng/phương pháp tĩnh:

public static T Cast<T>(this object o) 
{ 
    return (T)o; 
} 
Các vấn đề liên quan