2009-12-03 30 views
36

文字列形式のパラメータに何らかのフラグまたは修飾子を指定して、小文字または大文字にすることはできますか?私が何をしたいのC#文字列書式フラグまたは小文字に変更する文字

例:

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

募集出力:

こんにちはJOHNは、あなたが6個のリンゴを持っています。

PS:はい私は、文字列形式で使用する前にパラメータの大文字と小文字を変更できますが、これは必要ありません。

+4

)または.toupper()文字列にparamsは問題です。 – tjmoore

+5

"文字列paramsで.tolower()や.toupper()を呼び出すだけでは問題が発生するのはわかりません。 – Joe

+0

私は同じ状況に陥っています。 .ToLower()が私のために働かない理由は、フォーマット文字列がデータベースから来ているということです(つまり、エンドユーザによって設定可能です)。 – Ryan

答えて

55

詰め物と整列を定式化しているだけなので、簡単な方法はあなたが言ったようなものです。"John".ToUpper()または"John".ToLower()を使用してください。

もう1つの解決方法は、希望の文字列形式を提供するためにカスタム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; 
     } 
    } 
} 

そして、呼び出しは次のようになります。私はあなたがそれを望んでいないが、ちょうど.tolower呼び出して、なぜ私が(見ることはできません知っている

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

DisplayFormatAttributeの範囲内でこれを行う方法はありますか? – howcheng

+0

formatが指定されていない場合、 'NullReferenceException'が発生するので、' Format() 'メソッドのヌルチェック条件を追加する必要があります。 – gabr

6

要するに、 AFAIKを使用する場合は、元の値を修正するか、string.Formatに置き換えてください。カスタムカルチャを(string.Formatに)渡している場合は、s.ToLower()ではなく、culture.TextInfo.ToLower(s)を使用することをお勧めします。

+0

私はちょうど独自の文字列フォーマッタを書くことを提案しようとしていました。 – ChrisF

+0

実際、ここから*開始することができます:http://stackoverflow.com/questions/1322037#1322103しかし、もっとたくさんのことがあります... –

関連する問題