Преобразование строки в верхний регистр с использованием строковой интерполяции - PullRequest
0 голосов
/ 21 февраля 2019

Можем ли мы использовать интерполяцию строк для преобразования строки в верхний регистр, точно так же, как мы используем ее с DateTime object:

var str = $"Current date is {DateTime.Now:MM-dd-yyyy}";

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

PS Я ищу способ сделать это без вызова string.ToUpper или ToUpperInvariant методов, я знаю эти методыи я могу их использовать.

Я ищу "сокращенный" способ сделать это, как вместо того, чтобы писать:

DateTime.Now.ToString("MM-dd-yyyy")

Вместо этого вы пишете:

$"Current date is {DateTime.Now:MM-dd-yyyy}";

Если есть что-то подобное, это было бы здорово: {somekindOfString:U}

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Как уже говорилось ранее, вам нужен не метод DateTime, а метод строки.

дидактически, я бы сделал это:

string dt = DateTime.Now.ToString("MM-dd-yyyy");
Console.WriteLine($"current date is {dt}".ToUpperInvariant());

Если вы хотите знать, почему toUpperInvariant (), а не toUpper ():

это потому, что мы не будем рассматривать культуру окалы ( В C #, в чем разница между ToUpper () и ToUpperInvariant ()? )

0 голосов
/ 21 февраля 2019

Строковая интерполяция в основном использует String.Format(...), который использует FormatHelper, который использует ... ( См. MS Reference source ), который использует метод ToString(string format, IFormatProvider formatProvider), если ваш объект имеет интерфейс System.IFormattable

Я написал пример приложения для его проверки.

С

private class MyClass : IFormattable
{
    public string ToString(string format, IFormatProvider formatProvider)
    {
        return "I am called. format: " + format;
    }
}

Вы можете позвонить

MyClass mc = new MyClass();
Console.WriteLine($"myclass: {mc:MyParams}");

, который выдаст результат

myclass: I am called. format: MyParams

Для этого вы можете использовать интерполяцию строк с вашими пользовательскими параметрами, но вы не можете использовать ее с System.String -объектом.

0 голосов
/ 21 февраля 2019

Учитывая документацию DateTime.ToString Method , нет.Так как вам нужно манипулировать регистром строк, а не форматированием DateTime, это имеет смысл.

Для быстрого форматирования с интерполяцией строк вам нужно, чтобы форматируемый объект реализовывал IFormattable интерфейс, который не относится к типу String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...