Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用字符串插值替换双字符串格式_C#_.net_String.format_String Interpolation_C# 6.0 - Fatal编程技术网

C# 用字符串插值替换双字符串格式

C# 用字符串插值替换双字符串格式,c#,.net,string.format,string-interpolation,c#-6.0,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 = Str

我曾两次尝试将一行使用
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
。发件人:

插入字符串的结构如下:
$“{}…}”


通过将格式传递给方法,可以将格式作为表达式的一部分:


我的答案不是,但我不鼓励任何人(首先是我)将大量的老年退休金放在同一条线上。这只是可读性的问题,但是插值可能会成功。使用字符串插值可能是不可能的,因为您正在注入格式字符串(通过
strFormat
)。尽管可以按照Mario的建议进行简化,以使其更具可读性。您可以将内部string.format转换为字符串插值,但无法将外部string.format转换为字符串插值。因为给定的字符串是可变的。
$"{((double)fileSize/FileSizeConstant.KO).ToString(strFormat)}{(withUnit?" Kb":string.Empty)}";