我尝试将使用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
这可能还是我们需要在这种特殊情况下使用旧结构?
答案 0 :(得分:6)
主要问题在于strFormat
变量,你不能把它作为格式说明符,如"{((double)fileSize/FileSizeConstant.KO):strFormat}"
,因为冒号格式说明符不是插值表达式的一部分,因此不会被计算字符串文字N2
。来自documentation:
插值字符串的结构如下:
$"<text> { <interpolation-expression> <optional-comma-field-width> <optional-colon-format> } <text> ... } "
您可以将格式作为表达式的一部分,将其传递给double.ToString
方法:
$"{((double)fileSize/FileSizeConstant.KO).ToString(strFormat)}{(withUnit?" Kb":string.Empty)}";