Флаг формата строки C # или модификатор в нижний регистр - PullRequest
40 голосов
/ 03 декабря 2009

Можно ли указать какой-либо флаг или модификатор в параметре формата строки, чтобы сделать его строчным или прописным?

Пример того, что я хочу:

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

Требуется вывод:

Привет, ДЖОН, у тебя 6 яблок.

PS: Да, я знаю, что могу изменить регистр параметра, прежде чем использовать его в формате строки, но я не хочу этого.

Ответы [ 2 ]

64 голосов
/ 03 декабря 2009

Есть только отступы и форматирование ... Так что простой способ, как вы сказали, использовать "John".ToUpper() или "John".ToLower().

Другим решением может быть создание пользовательского IFormatProvider для предоставления желаемого формата строки.

Вот так будут выглядеть IFormatProvider и строка. Вызов формата.

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");
6 голосов
/ 03 декабря 2009

Короче, нет; AFAIK, вам нужно исправить исходные значения или использовать собственную замену на string.Format. Обратите внимание, что если вы переходите к пользовательской культуре (на string.Format), вы можете использовать culture.TextInfo.ToLower(s) вместо s.ToLower().

...