2013-05-02 43 views
12

Tôi tự hỏi điều gì sẽ là cách tốt nhất (theo nghĩa an toàn hơn và gọn gàng) để chuyển đổi từ một kiểu vô giá thành kiểu nullable "tương thích" khác.Chuyển đổi số thập phân? để tăng gấp đôi?

Cụ thể, chuyển đổi từ thập phân? để tăng gấp đôi? có thể được thực hiện bằng:

public double? ConvertToNullableDouble(decimal? source) 
{ 
    return source.HasValue ? Convert.ToDouble(source) : (double?) null; 
} 

Có cách nào tốt hơn để làm điều này? Có thể tận dụng chuyển đổi chuẩn?

+0

Cách của bạn là một cách hay. – SimpleVar

+1

Bạn đang làm đúng! Kiểm tra cũng tham khảo này: http://stackoverflow.com/questions/5487685/conversion-between-nullable-types – MUG4N

Trả lời

22

Được xây dựng trong phôi để giành chiến thắng! Chỉ cần thử nghiệm điều này trong VS2012 VS2010:

decimal? numberDecimal = new Decimal(5); 
decimal? nullDecimal = null; 
double? numberDouble = (double?)numberDecimal; // = 5.0 
double? nullDouble = (double?)nullDecimal;  // = null 

Chỉ cần sử dụng một diễn viên rõ ràng sẽ đúc null để null, và giá trị thập phân nội bộ để tăng gấp đôi. Sự thành công!

+0

Thử nghiệm nó và hoạt động như một say mê. Cảm ơn, đây là những gì tôi đang tìm kiếm nhưng tôi không nghĩ đến một dàn diễn viên. –

+0

Thật kỳ lạ, vì trong những câu hỏi như MUG4N liên kết với nó có vẻ như rất nhiều người có lý thuyết, nhưng không ai thực sự * đã thử *. :) –

+2

Trên thực tế, tất cả * chuyển đổi có liên quan đến nguồn và giá trị loại giá trị không thể vô hiệu hóa có thể được "nâng lên thành giá trị rỗng". –

1

Nói chung, nếu bạn muốn o chuyển đổi từ bất kỳ loại dữ liệu đến các khác miễn là chúng phù hợp, sử dụng này:

Convert.ChangeType(your variable, typeof(datatype you want convert to)); 

ví dụ:

string str= "123"; 
    int value1 = (int)Convert.ChangeType(str, typeof(int)); 
    float? value2 = (float?)Convert.ChangeType(str, typeof(float)); 
    ................................... 

Một chút thêm , nếu bạn muốn nó an toàn hơn, bạn có thể thêm một lần thử bắt được nó:

string str= "123"; 
try 
{ 
    int value1 = (int)Convert.ChangeType(str, typeof(int)); 
    int? value2 = (int?)Convert.ChangeType(str, typeof(int)); 
    float value3 = (float)Convert.ChangeType(str, typeof(float)); 
    float? value4 = (float?)Convert.ChangeType(str, typeof(float)); 
} 
catch(Exception ex) 
{ 
    // do nothing, or assign a default value 
} 

điều này được kiểm tra theo VS 20 10

+0

Có, đây là cách tổng quát hơn để chuyển đổi giữa các loại, không gọn gàng như câu trả lời được chấp nhận. @ Giswin Nó có hoạt động cho các nullables không? Tôi tưởng tượng như vậy, nhưng tôi không tìm thấy một bình luận cụ thể về điều này trong [tài liệu] (http://msdn.microsoft.com/en-us/library/dtb69x08.aspx). –

+0

bạn có thể sử dụng số này: số thập phân? v1 = 222; tăng gấp đôi? V2 = (double?) Convert.ChangeType (v1, typeof (double)); nhưng nếu v1 là null, Convert.ChangeType sẽ ném một ngoại lệ. và sau đó cố gắng bắt liều công việc còn lại. – Gisway

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