2009-12-03 23 views
36

Có thể chỉ định một số loại cờ hoặc công cụ sửa đổi trên một định dạng chuỗi param để làm cho chữ thường hoặc chữ thường không?Cờ định dạng chuỗi C# hoặc sửa đổi đối với chữ thường

Ví dụ về những gì tôi muốn:

String.Format("Hi {0:touppercase}, you have {1} {2:tolowercase}.", "John", 6, "Apples"); 

Wanted đầu ra:

Hi JOHN, bạn có 6 quả táo.

PS: Có Tôi biết rằng tôi có thể thay đổi trường hợp tham số trước khi sử dụng nó ở định dạng chuỗi, nhưng tôi không muốn điều này.

+4

Tôi biết bạn không muốn nó, nhưng tôi không thể hiểu tại sao chỉ gọi .tolower() hoặc .toupper() trên chuỗi params là một vấn đề. – tjmoore

+5

"Tôi không thể thấy tại sao chỉ cần gọi .tower() hoặc .toupper() trên params chuỗi là một vấn đề" - ví dụ, dữ liệu ràng buộc. – Joe

+0

Tôi cũng có tình huống tương tự. Lý do. ToLower() sẽ không hoạt động đối với tôi là chuỗi định dạng đến từ một cơ sở dữ liệu (tức là, nó có thể được cấu hình bởi người dùng cuối). – Ryan

Trả lời

55

Chỉ có hình đệm và sắp xếp hàng hóa ... Vì vậy, cách dễ dàng giống như bạn đã nói, sử dụng "John".ToUpper() hoặc "John".ToLower().

Một giải pháp khác có thể tạo một tùy chỉnh IFormatProvider, để cung cấp định dạng chuỗi bạn muốn.

Đây là cách sẽ xem IFormatProvider và cuộc gọi string.Format.

public class CustomStringFormat : IFormatProvider, ICustomFormatter 
{ 
    public object GetFormat(Type formatType) 
    { 
     if (formatType == typeof(ICustomFormatter)) 
      return this; 
     else 
      return null; 

    } 

    public string Format(string format, object arg, IFormatProvider formatProvider) 
    { 
     string result = arg.ToString(); 

     switch (format.ToUpper()) 
     { 
      case "U": return result.ToUpper(); 
      case "L": return result.ToLower(); 
      //more custom formats 
      default: return result; 
     } 
    } 
} 

Và cuộc gọi sẽ trông giống như:

String.Format(new CustomStringFormat(), "Hi {0:U}", "John"); 
+1

Có cách nào để thực hiện việc này trong giới hạn của một DisplayFormatAttribute không? – howcheng

+0

Nếu định dạng không được chỉ định sẽ có 'NullReferenceException', do đó, điều kiện kiểm tra null trong phương thức' Định dạng() 'sẽ được thêm vào. – gabr

6

Tóm lại, không; AFAIK bạn phải sửa các giá trị nguồn hoặc sử dụng thay thế của riêng bạn thành string.Format. Lưu ý rằng nếu bạn đang chuyển văn hóa tùy chỉnh (đến string.Format), bạn có thể muốn sử dụng culture.TextInfo.ToLower(s), thay vì chỉ s.ToLower().

+0

Tôi chỉ đề nghị viết trình định dạng chuỗi của riêng bạn. – ChrisF

+0

Thật vậy - bạn có thể * bắt đầu * ở đây: http://stackoverflow.com/questions/1322037#1322103, nhưng rất nhiều việc phải làm ... –

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