2009-07-10 30 views
5

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, TryParseToString
  • 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ỳ).

Trả lời

0

Tôi đoán nó phụ thuộc vào cách bạn định sử dụng chức năng này.

IMO, phương pháp khuyến nông là một cách hay để thực hiện. Bạn không chắc chắn, cách người dùng của assembly của bạn làm việc với C# 1 hoặc 2 (ngôn ngữ không hỗ trợ các phương thức mở rộng) sẽ thấy nó.

Phương pháp mở rộng cả hai cách sẽ tốt.
tức là về các loại số - để chuyển đổi từ số sang Roman và
trên chuỗi - để chuyển đổi từ La Mã sang số (bạn sẽ phải xem xét loại số phải chứa giá trị tối đa).

+0

Phương pháp mở rộng phủ nhận khả năng sử dụng String.Format, đúng không? –

+0

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

+0

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. –

1

Nhà cung cấp định dạng hoạt động tốt cho các loại của riêng bạn, nhưng chúng vụng về khi sử dụng các loại được tạo sẵn khiến bạn phải tạo một cá thể của nhà cung cấp và chuyển nó sang phương thức Định dạng. Sẽ thuận tiện hơn khi sử dụng phương thức mở rộng trực tiếp trên int.

1

Cá nhân, tôi sẽ viết một lớp chữ số La Mã, với tryparse, parse + tostring(), với các phương pháp mở rộng để hỗ trợ nó, cho một sự kết hợp của tất cả các lý do trên (bao gồm cả bình luận sau của bạn để trả lời của shahkalpesh.)

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