用字符串插值替换double String.Format

时间:2015-07-14 13:31:55

标签: 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 = String.Format(String.Format("{{0:{0}}}{1}", 
   "N2", " Kb"), 1000000000 / 1048576D);

输出:953,67 Kb

这可能还是我们需要在这种特殊情况下使用旧结构?

1 个答案:

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