使用字符串插值中的变量指定小数位
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 中的样子: