C# 用字符串插值替换双字符串格式
我曾两次尝试将一行使用C# 用字符串插值替换双字符串格式,c#,.net,string.format,string-interpolation,c#-6.0,C#,.net,String.format,String Interpolation,C# 6.0,我曾两次尝试将一行使用String.Format的代码迁移到新的.NET Framework 6字符串插值功能,但直到现在我都没有成功 var result = String.Format(String.Format("{{0:{0}}}{1}", strFormat, withUnit ? " Kb" : String.Empty), (double)fileSize / FileSizeConstant.KO); 一个有效的例子可以是: var result = Str
String.Format
的代码迁移到新的.NET Framework 6字符串插值功能,但直到现在我都没有成功
var result = String.Format(String.Format("{{0:{0}}}{1}",
strFormat, withUnit ? " Kb" : String.Empty),
(double)fileSize / FileSizeConstant.KO);
一个有效的例子可以是:
var result = String.Format(String.Format("{{0:{0}}}{1}",
"N2", " Kb"), 1000000000 / 1048576D);
其中输出:953,67 Kb
这是可能的,还是我们需要为这种特殊情况使用旧的构造?主要问题在于
strFormat
变量,您不能像这样将其作为格式说明符“{((double)fileSize/FileSizeConstant.KO):strFormat}”
因为冒号格式说明符不是插值表达式的一部分,因此不会计算为字符串文本N2
。发件人:
插入字符串的结构如下:$“{}…}”
通过将格式传递给方法,可以将格式作为表达式的一部分:
我的答案不是,但我不鼓励任何人(首先是我)将大量的老年退休金放在同一条线上。这只是可读性的问题,但是插值可能会成功。使用字符串插值可能是不可能的,因为您正在注入格式字符串(通过
strFormat
)。尽管可以按照Mario的建议进行简化,以使其更具可读性。您可以将内部string.format转换为字符串插值,但无法将外部string.format转换为字符串插值。因为给定的字符串是可变的。
$"{((double)fileSize/FileSizeConstant.KO).ToString(strFormat)}{(withUnit?" Kb":string.Empty)}";