Search code examples
c#.netstring.formatstring-interpolationc#-6.0

Replace double String.Format with string interpolation


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?


Solution

  • 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)}";