使用字符串插值将字符串转换为大写
Convert string to upper case using string interpolation
我们可以使用字符串插值将字符串转换为大写吗,就像我们在 DateTime
对象中使用它一样:
var str = $"Current date is {DateTime.Now:MM-dd-yyyy}";
在知道culture/localization不重要的情况下,在:
之后是否可以传递任何字符串格式修饰符将字符串转换为大写?
P.S。我正在寻找一种无需调用 string.ToUpper
或 ToUpperInvariant
方法即可执行此操作的方法,我知道这些方法,并且可以使用它们。
我正在寻找一种 "shorthand" 的方式来做,就像而不是写:
DateTime.Now.ToString("MM-dd-yyyy")
你改为:
$"Current date is {DateTime.Now:MM-dd-yyyy}";
如果有这样的东西那就太棒了:{somekindOfString:U}
鉴于 DateTime.ToString Method documentation,没有。由于您要做的是操作字符串大小写而不是 DateTime 格式,所以这是有道理的。
对于字符串插值快速格式化,您希望要格式化的对象实现 IFormattable
接口,而不是 String
类型。
如前所述,您需要的不是 DateTime 方法,而是字符串方法。
从教学上讲,我会这样做:
string dt = DateTime.Now.ToString("MM-dd-yyyy");
Console.WriteLine($"current date is {dt}".ToUpperInvariant());
如果您想知道为什么使用 UpperInvariant() 而不是 toUpper():
因为我们不会考虑本土文化(In C# what is the difference between ToUpper() and ToUpperInvariant()?)
字符串插值基本上使用 String.Format(...)
,它使用 FormatHelper
,它使用 ... (See 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
-object 中使用它。
我们可以使用字符串插值将字符串转换为大写吗,就像我们在 DateTime
对象中使用它一样:
var str = $"Current date is {DateTime.Now:MM-dd-yyyy}";
在知道culture/localization不重要的情况下,在:
之后是否可以传递任何字符串格式修饰符将字符串转换为大写?
P.S。我正在寻找一种无需调用 string.ToUpper
或 ToUpperInvariant
方法即可执行此操作的方法,我知道这些方法,并且可以使用它们。
我正在寻找一种 "shorthand" 的方式来做,就像而不是写:
DateTime.Now.ToString("MM-dd-yyyy")
你改为:
$"Current date is {DateTime.Now:MM-dd-yyyy}";
如果有这样的东西那就太棒了:{somekindOfString:U}
鉴于 DateTime.ToString Method documentation,没有。由于您要做的是操作字符串大小写而不是 DateTime 格式,所以这是有道理的。
对于字符串插值快速格式化,您希望要格式化的对象实现 IFormattable
接口,而不是 String
类型。
如前所述,您需要的不是 DateTime 方法,而是字符串方法。
从教学上讲,我会这样做:
string dt = DateTime.Now.ToString("MM-dd-yyyy");
Console.WriteLine($"current date is {dt}".ToUpperInvariant());
如果您想知道为什么使用 UpperInvariant() 而不是 toUpper():
因为我们不会考虑本土文化(In C# what is the difference between ToUpper() and ToUpperInvariant()?)
字符串插值基本上使用 String.Format(...)
,它使用 FormatHelper
,它使用 ... (See 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
-object 中使用它。