Replace double String.Format with string interpolation
Asked Answered
M

1

9

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?

Misadvise answered 14/7, 2015 at 13:31 Comment(3)
Mine is not an answer, but I'd discourage anyone (me firstly) to put tons of ops in the same line. It's just matter of readability, but then maybe the interpolation can succeed.Tableware
It's probably not possible with string interpolation since you're injecting a format string (via strFormat). Although it could be simplified as Mario suggests to make it more readable.Oxysalt
you can turn the inner string.format to string interpolation but its not possible for the outer string.format. since the given string is variable.Pilar
O
6

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)}";
Oxidation answered 14/7, 2015 at 15:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.