2011-12-09 27 views
9

Có thể đưa vật thể vào loại mong muốn bằng cách sử dụng System.Type? làm tham chiếu không?Truyền bằng System.Type - C#

Tôi đã tìm kiếm và sự đồng thuận chung là không, mặc dù tôi đã hy vọng có thể có một số trợ giúp được giới thiệu trong C# 4.0 có thể giúp tôi.

I.e. dưới đây sẽ không hoạt động, nhưng giả mã là những gì tôi muốn.

object o = null; 
var t = typeof(string); 
... 
string foo = (t)o; 

Edit: Tôi cần sử dụng để tái tạo lại XmlSerializer/deserialize để loại lưu trữ trong t

+0

gì bạn mong chờ kiểu thời gian biên dịch của 'foo' là gì? Bạn đang thực sự cố gắng đạt được điều gì? Giải thích bức tranh lớn hơn sẽ giúp ích rất nhiều. –

+0

Nếu bạn cố gắng viết một cách sử dụng mẫu, bạn sẽ thấy rằng câu hỏi của bạn là vô nghĩa. – SLaks

+0

Ngay cả đối với XmlSerializer, tôi không thấy lý do tại sao bạn cần dàn diễn viên này. Bạn có thể thêm mã hiển thị những gì bạn đang cố gắng thực hiện hay không, ngay cả khi mã này không hoạt động? –

Trả lời

3

Điều đó không có ý nghĩa.

Truyền không thay đổi một đối tượng nào đó; nó chỉ cho phép bạn sử dụng đối tượng như kiểu đã cho tại thời điểm biên dịch.
Nếu bạn không biết loại bạn đang truyền nó đến tại thời gian biên dịch, diễn viên là vô ích, vì nó sẽ không cho phép bạn làm bất cứ điều gì với biểu thức đúc.

+0

Thực ra nó có thể thay đổi một đối tượng, nếu nó thực hiện một toán tử 'tường minh'. –

+0

@KooKiz: Không phải lúc chạy. Điều đó sẽ chỉ xảy ra nếu trình biên dịch biết gọi cho toán tử. – SLaks

1

Không cần truyền. Đối tượng không thay đổi, loại tham chiếu (biến) của bạn thay đổi khi "truyền".

0

Tôi đoán bạn đang tìm kiếm một cái gì đó như System.ChangeType(). Đây hoạt động nếu các loại thực hiện IConvertible, và nếu nó là chuyển đổi thành loại mong muốn (tất nhiên đây không phải là một diễn viên)

14

Có một cái nhìn tại địa chỉ:

var foo = Convert.ChangeType(o, typeof(string))