TL:DR:
对于C#字符串插值,<alignment>在{<interpolationExpression>,<alignment>}中实际添加空格在哪里?它是前一个字符串的最右边的字符吗?这是前一个字符串的最左边的字符吗?我怎样才能做一个像下面这样简单的桌子呢?
玩具示例:
在C#中,我试图了解字符串间距是如何与字符串插值一起工作的。考虑下表。
Score: 97
Name: Jack
ID: 01123我试图在下面复制这个简单的例子,并在第二列和第一列之间放置了跟踪间距的数字。对于空格字符串,我没有两位数,而是从1到9,后面是代表10的0,然后是1到9(代表11-19个空格),后面是0(代表20个空格)。
Console.WriteLine("12345678901234567890"); // For tracking spacing
Console.WriteLine($"Score: {97, 10}");
Console.WriteLine($"Name: {"Jack", 10}");
Console.WriteLine($"ID: {01123, 10}");其输出是
12345678901234567890
Score: 97
Name: Jack
ID: 1123行Score: ... 97的间距表示97和Score:之间的间隔基于Score:的最后一个字符,即:。我根据位于6位置的间距字符串6和位于9位置的间距字符串6得出这一结论。然而,行Name: ... Jack的间距,Name中的:与Jack中的J之间的距离是12。
我认为解决这个对齐问题的一个解决方案可能是使用String.Length属性,但我不确定。在C#字符串插值中,对齐是如何工作的,我如何使用它来制作一个简单的表,就像我所展示的那样?
发布于 2022-02-22 15:34:25
问题是格式仍然使每个值字符串具有相同的长度,但是初始字段名是而不是相同的长度,因此您的固定长度值字符串从不同的位置开始。
在这种情况下,第一列是静态文本,第二列总是左对齐,额外的格式是没有帮助的,因为您可以直接放入空格:
Console.WriteLine("12345678901234567890"); // For tracking spacing
Console.WriteLine($"Score: {97}");
Console.WriteLine($"Name: {"Jack"}");
Console.WriteLine($"ID: {01123}");但是假设你有更像这样的数据:
var items = new List<(string, object)> {
("Score", 97),
("Name", "Jack")
("ID", 1123)
};您可以通过将填充放在前面的字段名上来处理这一点,如下所示:
foreach(var item in items)
{
Console.WriteLine($"{item.Item1,-10}{item.Item2}");
}但这仍然缺少:分隔符。你可以这样恢复它:
foreach(var item in items)
{
Console.WriteLine($"{item.Item1+':',-10}{item.Item2}");
}这里可能值得探讨的另一件事是选项卡字符,但是如果字段名之间的差异大于选项卡的宽度,则可能会比较棘手。
https://stackoverflow.com/questions/71223828
复制相似问题