2011-01-11 30 views
5

Tôi muốn biết nếu có một hạn chế cụ thể đối với các loại số mà cho phép đúc để làm việc trong các trường hợp sau đây:Chuyển đổi kiểu dữ liệu cụ số cho số chung loại

class MyClass<T> 
{ 

... 

void MyMethod() 
{ 
    .... 
    byte value = AnotherObject.GetValue() 

    Tvalue = (T)value; 
    .... 
} 

... 

} 

tôi đã cố gắng boxing và unboxing như:

Tvalue = (T)(object)value; 

Nhưng điều này chỉ hoạt động nếu T == byte. Nếu không, tôi sẽ nhận được InvalidCastException.

T luôn là loại số (như ngắn, nổi, v.v ...).

+0

Mục đích của bạn là gì? Bạn có thể sử dụng 'Converter'? – Gabe

Trả lời

10

Có, bạn chỉ có thể hủy một giá trị thành cùng một loại.

Bạn đã cố gắng sử dụng

Tvalue = (T) Convert.ChangeType(value, typeof(T)); 

? Dưới đây là một ví dụ:

using System; 

class Test 
{ 
    static void Main() 
    { 
     TestChange<int>(); 
     TestChange<float>(); 
     TestChange<decimal>(); 
    } 

    static void TestChange<T>() 
    { 
     byte b = 10; 
     T t = (T) Convert.ChangeType(b, typeof(T)); 
     Console.WriteLine("10 as a {0}: {1}", typeof(T), t); 
    } 
} 

Không có hạn chế ở đây, mặc dù bạn có thể chỉ định

where T : struct, IComparable<T> 

như một đường chuyền đầu tiên. Hạn chế đó không liên quan gì đến việc chuyển đổi đang hoạt động - nó sẽ chỉ là cố gắng ngăn người gọi sử dụng một loại không phù hợp.

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