Подтвердить что ты не робот

Флаг формата строки С# или модификатор в нижнем регистре

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

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

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

Требуемый вывод:

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

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

4b9b3361

Ответ 1

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

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

Вот как будет выглядеть IFormatProvider и string.Format call.

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");

Ответ 2

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