用字符串插值替换双重String.Format

9

我尝试将使用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千字节

这是否可行,或者我们需要使用旧的结构来处理这种特殊情况?


4
我的回答不是一个问题,但我会阻止任何人(首先是我自己)在同一行中放置大量操作。这只是可读性的问题,但是也许插值可以成功。 - Mario Vernari
这可能不可能使用字符串插值,因为你是通过 strFormat 注入了一个格式化字符串。尽管如Mario所建议的那样可以简化它以提高可读性。 - D Stanley
你可以将内部的string.format转换为字符串插值,但对于外部的string.format来说这是不可能的,因为给定的字符串是可变的。 - M.kazem Akhgary
1个回答

6
主要问题出在strFormat变量上,你不能像这样把它作为格式说明符放入字符串插值表达式中: "{((double)fileSize/FileSizeConstant.KO):strFormat}" ,因为冒号格式说明符不是插值表达式的一部分,因此不会被解析为字符串文字N2。根据文档

字符串插值表达式的结构如下:
$"<text> { <interpolation-expression> <optional-comma-field-width> <optional-colon-format> } <text> ... } "

您可以通过将其传递给double.ToString方法,使格式成为表达式的一部分:
$"{((double)fileSize/FileSizeConstant.KO).ToString(strFormat)}{(withUnit?" Kb":string.Empty)}";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接