将 double String.Format 替换为字符串插值
Replace double String.Format with string interpolation
我尝试将一行使用 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
。来自 documentation:
The structure of an interpolated string is as follows:
$"<text> { <interpolation-expression> <optional-comma-field-width> <optional-colon-format> } <text> ... } "
您可以通过将格式传递给 double.ToString
方法使格式成为表达式的一部分:
$"{((double)fileSize/FileSizeConstant.KO).ToString(strFormat)}{(withUnit?" Kb":string.Empty)}";
我尝试将一行使用 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
。来自 documentation:
The structure of an interpolated string is as follows:
$"<text> { <interpolation-expression> <optional-comma-field-width> <optional-colon-format> } <text> ... } "
您可以通过将格式传递给 double.ToString
方法使格式成为表达式的一部分:
$"{((double)fileSize/FileSizeConstant.KO).ToString(strFormat)}{(withUnit?" Kb":string.Empty)}";