将 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)}";