2009-10-23 34 views
11

Tôi đang cố gắng tạo một phương pháp chung để đúc một đối tượng, nhưng dường như không thể phá vỡ hạt dẻ đó. (Đó là thứ sáu 3:00, là một tuần dài)Phương pháp đúc kiểu chung (.Net)

Ok, vì vậy tôi có kịch bản này:

// We have a value (which .net sets as a double by default) 
object obj = 1.0; 

// We have the target type as a string, which could be anything: 
// say string sometType = "System.Decimal" 
Type type = Type.GetType(someType); 

// I need a generic way of casting this 
object castedObj = (xxx) obj; 

Làm thế nào tôi có thể đúc tượng rằng quát mà không cần tạo một số lượng vô tận của if-else-Các tuyên bố?

+0

Bạn có muốn gõ bỏ nó vào loại đại diện bởi các biến 'type' ? Bạn khai báo castedObj như thế nào? I. bạn sẽ cho nó loại nào? Không có điểm typecasting nếu bạn lưu trữ nó như là một đối tượng anyway ... –

+0

Bạn không thể đúc một int boxed cho bất kỳ loại struct khác hơn int (hoặc int?) (Xem http://blogs.msdn.com/ericlippert/archive/ 2009/03/19/represent-and-identity.aspx để biết chi tiết.) Nếu bạn cần phải làm điều này thì bạn cần phải sử dụng một cái gì đó khác hơn là một diễn viên. –

Trả lời

17

Bạn có thể sử dụng phương pháp Convert.ChangeType, nếu các loại bạn sử dụng triển khai IConvertible (tất cả các loại nguyên thủy).

Convert.ChangeType(value, targetType); 
3

Hãy xem phương pháp Convert.ChangeType, tôi nghĩ rằng nó sẽ đáp ứng nhu cầu của bạn.

0

Bạn không thể truyền cho loại bạn chỉ định động.

Thay vào đó, bạn có thể cân nhắc sử dụng generics nhưng tôi cần thêm mã để xem cách mã có thể giúp bạn.

0

Bạn có thể làm một cái gì đó như sau:

Type underlyingType = Type.GetType(someType); 


    if (underlyingType.IsGenericType && underlyingType.GetGenericTypeDefinition().Equals(typeof (Nullable<>))) 
    { 
     var converter = new NullableConverter(underlyingType); 
     underlyingType = converter.UnderlyingType; 
    } 

    // Try changing to Guid 
    if (underlyingType == typeof (Guid)) 
    { 
     return new Guid(value.ToString()); 
    } 
    return Convert.ChangeType(value, underlyingType); 

Kudos để Monsters Go My.net cho chức năng thay đổi loại

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