web-dev-qa-db-ja.com

C#文字列形式のフラグまたは小文字のパラメーターへの修飾子

文字列形式のパラメータにある種のフラグまたは修飾子を指定して小文字または大文字にすることは可能ですか?

私が欲しいものの例:

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

必要な出力:

こんにちは、ジョン、りんごが6個あります。

PS:はい、文字列形式で使用する前にparamの大文字と小文字を変更できることはわかっていますが、これは必要ありません。

41
rjlopes

パディングとアラインメントの書式設定しかありません...簡単な方法は、あなたが言ったように、"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;
        }
    }
}

そして、呼び出しは次のようになります。

String.Format(new CustomStringFormat(), "Hi {0:U}", "John");
65
Guido Zanon

要するに、いいえ。私の知る限り、ソース値を修正するか、独自の_string.Format_の代わりを使用する必要があります。カスタムカルチャを(_string.Format_に)渡す場合は、culture.TextInfo.ToLower(s)ではなくs.ToLower()を使用することをお勧めします。

7
Marc Gravell