使用字符串插值将字符串转换为大写

时间:2019-02-21 13:06:09

标签: c# c#-6.0

我们可以使用字符串插值将字符串转换为大写吗,就像我们将其与DateTime对象一起使用一样:

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

知道文化/本地化并不重要,在:之后是否可以通过任何字符串格式修饰符将字符串转换为大写?

P.S。我正在寻找一种无需调用string.ToUpperToUpperInvariant方法的方法,我知道这些方法,可以使用它们。

我正在寻找一种“速记”的方式,就像不写一样:

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

您改为:

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

如果有类似这样的东西,那就太棒了:{somekindOfString:U}

3 个答案:

答案 0 :(得分:2)

给出DateTime.ToString Method documentation,否。因为您要操作的是字符串大小写而不是DateTime格式,所以这很有意义。

对于字符串插值快速格式,您希望要格式化的对象实现IFormattable接口,而不是String类型的情况。

答案 1 :(得分:0)

如前所述,您需要的不是DateTime方法,而是字符串方法。

在教学上,我会这样做:

import xml.etree.ElementTree as Et

file = Et.parse('some.xml')

tags = file.findall('tag')
for tag in tags:
temp1 = []
beginTime = tag.get('beginTime')
temp1.append(beginTime)
endTime = tag.get('endTime')
temp1.append(endTime)
eventId = tag.find('EventId').text
temp1.append(eventId)
items = tag.findall('item')

for item in items:
    temp2 = []
    color = item.get('color')
    temp2.append(color)
    name = item.find('name').text
    temp2.append(name)
    count = item.find('count').text
    temp2.count(count)
    infos = item.find('subtag').findall('Info')

    temp3 = []
    for info in infos:
        name = info.get('name')
        value = info.text
        temp3.append(name)
        temp3.append(value)
    temp3 = [';'.join(temp3)]
    result = temp1 + temp2 + temp3
    result = '|'.join(result)
    print(result)

如果您想知道为什么要toUpperInvariant()而不是toUpper():

这是因为我们不会考虑ocal文化(In C# what is the difference between ToUpper() and ToUpperInvariant()?

答案 2 :(得分:0)

字符串插值基本上使用String.Format(...),它使用FormatHelper,它使用...(See MS reference source),如果您的对象具有接口{{,则使用ToString(string format, IFormatProvider formatProvider)方法1}}实现。

我编写了一个示例应用程序对其进行测试。

使用

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 对象一起使用。