2012-04-12 16 views
7

Tôi đang chuyển đổi một số nullable integer thành string và Resharper cảnh báo tôi sử dụng InvariantCulture.Làm cách nào để chuyển đổi một chuỗi có thể vô hiệu thành chuỗi sẽ an toàn cho các máy tính ở các ngôn ngữ khác nhau?

shipment.ShipmentID.ToString() 

Một nhanh chóng Alt-Enter, Enter sau, mang lại cho tôi điều này:

shipment.ShipmentID.ToString(CultureInfo.InvariantCulture) 

Thật không may, Resharper là không hài lòng, và cho thấy điều tương tự, mà không có ý nghĩa để tôi.

shipment.ShipmentID.ToString(CultureInfo.InvariantCulture, 
           CultureInfo.InvariantCulture) 

ToString() trên int nullable sẽ không xây dựng, đem lại cho tôi một lỗi nêu Không có phương pháp quá tải 'ToString' mất 1 đối số.

Int không thể vô hiệu hoạt động khác nhau.

int requiredInt = 3; 
// no Resharper or compiler warning 
var stringFromRequiredInt = requiredInt.ToString(CultureInfo.InvariantCulture); 

Tôi nên làm gì để chuyển đổi một nullable int đến một string rằng sẽ được an toàn cho máy tính trong miền địa phương khác nhau?

+3

gì xảy ra khi bạn sử dụng shipment.ShipmentID.Value? Với các kiểu nullable, tôi thường kiểm tra null bằng cách sử dụng boolean .HasValue và sau đó sử dụng .Value. –

Trả lời

12

Nullable<T> không có quá tải ToString() với đối số; ReSharper không hoàn toàn xử lý tình huống đúng cách.

Kể từ default(Nullable<int>).ToString() lợi nhuận string.Empty, bạn có thể làm ReSharper hạnh phúc như thế này:

shipment.ShipmentID.HasValue 
     ? shipment.ShipmentID.Value.ToString(CultureInfo.InvariantCulture) : "" 

Hoặc:

shipment.ShipmentID != null 
     ? ((int)shipment.ShipmentID).ToString(CultureInfo.InvariantCulture) : "" 
1

Kiểm tra điều này link.

bạn nên sử dụng văn bản bất biến chỉ cho các quy trình yêu cầu kết quả độc lập với văn hóa, chẳng hạn như dịch vụ hệ thống. Trong các trường hợp khác, nó tạo ra các kết quả có thể sai về mặt ngôn ngữ hoặc không phù hợp về mặt văn hóa.

CẬP NHẬT: Vì vậy, một trong những mục đích chính để sử dụng nó có thể là 'if' so sánh câu lệnh.