【问题标题】:Replace double String.Format with string interpolation用字符串插值替换 double String.Format
【发布时间】:2015-10-03 04:19:18
【问题描述】:

我尝试将使用 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)。虽然它可以按照马里奥的建议进行简化以使其更具可读性。
  • 您可以将内部 string.format 转换为字符串插值,但对于外部 string.format 则不可能。因为给定的字符串是可变的。

标签: c# .net string.format string-interpolation c#-6.0


【解决方案1】:

主要问题在于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)}";

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2015-11-28
    • 2019-06-30
    • 2022-12-09
    • 2013-03-24
    • 1970-01-01
    • 2023-01-05
    • 2017-07-15
    相关资源
    最近更新 更多