使用字符串插值中的变量指定小数位

Specify decimal places using variables inside string interpolation

我有一个字符串格式,其中包含两个整数变量,每个变量都需要格式化为可变长度:

int x = 1234;
int y = 42;

// Simplified, real values come from method outputs, so must use the variables:
int xFormatDigitCount = 7;
int yFormatDigitCount = 3; 

var xStringFormat = new string('0', xFormatDigitCount); // "0000000"
var yStringFormat = new string('0' ,yFormatDigitCount); // "000"

现在我只能使用整数变量的 .ToString() 方法获得所需的格式:

var xString = x.ToString(xStringFormat);
var yString = y.ToString(yStringFormat);
return $"{xString}-{yString}";

但这似乎是一种开销,因为字符串插值支持 {var:format} 格式。有没有办法只使用字符串插值来获取我的字符串,而不使用 x 和 y 的 ToString()?

我不确定我是否理解这个问题,但是 string.Format 的格式说明符以及因此字符串插值是文本的 - 它们不接受变量。

您可以使用静态格式说明符:

$"{x:0000000}-{y:000}"

或者求助于老string.Format:

string.Format(
    $"{{0:{new string('0', xFormatDigitCount)}}}-{{1:{new string('0', yFormatDigitCount)}}}",
    x,
    y);

编辑:

基于weston's :

$"{x.ToString($"D{xFormatDigitCount}")}-{y.ToString($"D{yFormatDigitCount}")}"

您可以在插入的字符串中调用 ToString 方法。

$"{x.ToString(xStringFormat)}-{y.ToString(yStringFormat)}"

Is there a way to get my string with only string interpolation, without using x and y's ToSTring()

我不这么认为,但多亏了 ToString("Dx"):

它可以变得更干净

合二为一(嵌套插值):

public string Format(int x, int y, int xDigitCount, int yDigitCount)
{
    return $"{x.ToString($"D{xDigitCount}")}-{y.ToString($"D{yDigitCount}")}";
}

Stack Overflow 语法高亮显示跟不上,所以看起来很奇怪,但这是它在 VS 中的样子: