2009-12-03 33 views
36

是否可以在字符串格式參數上指定某種標誌或修飾符以使其成爲小寫或大寫?我想要什麼C#字符串格式標誌或修飾符轉爲小寫參數

例子:

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

通緝輸出:

JOHN嗨,你有6個蘋果。

PS:是的,我知道我可以在使用字符串格式之前更改param的大小寫,但我不想要這樣做。

+4

我知道你不想要它,但我不明白爲什麼只是調用.tolower()或字符串.toupper() params是一個問題。 – tjmoore 2009-12-03 12:46:11

+5

「我看不出爲什麼在字符串params上調用.tolower()或.toupper()是一個問題」 - 例如,數據綁定。 – Joe 2009-12-04 20:02:29

+0

我有同樣的情況。原因.ToLower()對我不起作用的是格式化字符串來自數據庫(即,它可由最終用戶配置)。 – Ryan 2012-05-14 20:15:10

回答

55

只有填充和對齊格式...所以簡單的方法就像你說的,使用"John".ToUpper()"John".ToLower()

另一種解決方案可以創建一個自定義IFormatProvider,以提供所需的字符串格式。

這是如何看待IFormatProvider和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; 
     } 
    } 
} 

和呼叫的樣子:

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

有沒有辦法在DisplayFormatAttribute的範圍內做到這一點? – howcheng 2014-07-28 17:11:34

+0

如果未指定格式,將會有'NullReferenceException',因此應該添加'Format()'方法中的空檢查條件。 – gabr 2016-01-21 13:37:04

6

總之,沒有; AFAIK你必須修復源值,或使用你自己的替代品string.Format。請注意,如果您傳遞的是自定義文化(至string.Format),則可能需要使用culture.TextInfo.ToLower(s),而不僅僅是s.ToLower()

+0

我只是建議編寫你自己的字符串格式化程序。 – ChrisF 2009-12-03 12:47:47

+0

的確 - 您可能*開始*在這裏:http://stackoverflow.com/questions/1322037#1322103,但還有很多事情要做... – 2009-12-03 12:49:08

相關問題