我们可以使用字符串插值将字符串转换为大写吗,就像我们将其与DateTime
对象一起使用一样:
var str = $"Current date is {DateTime.Now:MM-dd-yyyy}";
知道文化/本地化并不重要,在:
之后是否可以通过任何字符串格式修饰符将字符串转换为大写?
P.S。我正在寻找一种无需调用string.ToUpper
或ToUpperInvariant
方法的方法,我知道这些方法,可以使用它们。
我正在寻找一种“速记”的方式,就像不写一样:
DateTime.Now.ToString("MM-dd-yyyy")
您改为:
$"Current date is {DateTime.Now:MM-dd-yyyy}";
如果有类似这样的东西,那就太棒了:{somekindOfString:U}
答案 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
对象一起使用。