I tried to migrate a line of code that uses String.Format
twice to the new .NET Framework 6 string interpolation feature but until now I was not successfull.
var result = String.Format(String.Format("{{0:{0}}}{1}",
strFormat, withUnit ? " Kb" : String.Empty),
(double)fileSize / FileSizeConstant.KO);
A working example could be:
var result = String.Format(String.Format("{{0:{0}}}{1}",
"N2", " Kb"), 1000000000 / 1048576D);
which outputs: 953,67 Kb
Is that possible or do we need to use the old construct for this special case?
The main issue lies in strFormat
variable, you can't put it as format specifier like this "{((double)fileSize/FileSizeConstant.KO):strFormat}"
because colon format specifier is not a part of interpolation expression and thus is not evaluated into string literal N2
. From documentation:
The structure of an interpolated string is as follows:
$"<text> { <interpolation-expression> <optional-comma-field-width> <optional-colon-format> } <text> ... } "
You can make format as a part of expression by passing it to double.ToString
method:
$"{((double)fileSize/FileSizeConstant.KO).ToString(strFormat)}{(withUnit?" Kb":string.Empty)}";