Tôi đã muốn xuất một số nguyên sang số La Mã và chạy trên this câu trả lời của Jesse Slicer. Đây là một phương pháp khuyến nông, nhưng tôi đã tự hỏi về lợi dụng ToString(string, IFormatProvider)
để làm một cái gì đó giống nhưFormatProvider so với phương pháp mở rộng so với lớp mới
int a = 10;
string b = a.ToString("RN", provider);
// OR
string c = string.Format(provider, "{0:RN} blah foo", a);
thay vì
int a = 10;
string b = a.ParseRomanNumeral();
// OR
string c = string.Format("{0} blah foo", a.ParseRomanNumeral());
Tôi chưa bao giờ viết một nhà cung cấp định dạng vì vậy tôi không chắc chắn về làm việc liên quan nhưng đây là câu hỏi của tôi. Đối với một số chuyển đổi định dạng rõ ràng như chữ số La Mã, bạn sẽ sử dụng:
- một nhà cung cấp định dạng
- sử dụng một phương pháp khuyến nông
- viết một lớp RomanNumeral mà thực hiện
Parse
,TryParse
vàToString
- cái gì khác
và tại sao?
Có sử dụng string.Format()
và bất kỳ phương pháp anh em họ nào của nó (ví dụ: StringBuilder.AppendFormat()
) có ảnh hưởng đến câu trả lời của bạn không? Rõ ràng với các phương pháp mở rộng, bạn không thể truy cập chuyển đổi bằng cách sử dụng một trong các phương pháp định dạng này.
Tôi nghĩ rằng một lớp tùy chỉnh để thực hiện toàn bộ gam màu sẽ là thận trọng nhất nhưng cũng tốn nhiều thời gian nhất. Đi với các nhà cung cấp định dạng tùy chỉnh có vẻ như nó sẽ bước trên các ngón chân của một số công cụ toàn cầu hóa hiện có (nếu bạn có bất kỳ).
Phương pháp mở rộng phủ nhận khả năng sử dụng String.Format, đúng không? –
Không thực sự. Nhưng, định dạng sẽ hoạt động như thế nào khi chuyển đổi từ chuỗi sang chữ số La Mã theo mã? – shahkalpesh
String.Format sẽ không cho chuỗi để chuyển đổi số (nó có thể không). Đây là lý do tại sao tôi nghĩ rằng một lớp RomanNumeral bao gồm tất cả các sử dụng thanh lịch nhất. –