使用字符串插值,如何填充指定字符?

20

我知道我在这里面临危险,但是在SO/Google上找不到答案:

使用字符串插值,如何使用给定的字符进行填充?例如:

foreach (var p in people) {
    Console.WriteLine($"{p.Name,-10}: {p.Age}");
}
会导致(例如):
Joe       : 26
Dan       : 52

如何使用字符串插值将空格替换为点?例如,将“Hello world”转换为“Hello.world”。

Joe.......: 26
Dan.......: 52

我知道可以使用p.Name.PadRight(10,'.'),但我相信有一种使用字符串插值参数的方法,就像填充长度一样。

(我知道我可以使用 p.Name.PadRight(10,'.'),但我相信有一种使用字符串内嵌参数的方式,就像填充长度那样)。


3
在当前版本的C#中,{p.Name:10}是无效的。左对齐且填充10个空格的正确格式应该使用逗号和负值进行左对齐,如下所示:{p.Name,-10}。正值则执行右对齐。 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated#structure-of-an-interpolated-string - Triynko
2个回答

9
浏览 Microsoft's Docs for the alignment component 中的字符串格式化,我找到了这个小节。

如果需要填充,将使用空格。

如果你要使用字符串插值,你就只能使用空格。正如你之前注意到的那样,string.PadRight() 可以作为一种解决方法。

@Tar你尝试了我下面发布的解决方案吗?还是说这不是你要找的? - FreedomOfSpeech
1
@RazvanR,我知道那个选项,但我希望通过字符串插值机制找到一个更简洁的解决方案。 - Tar
哦,好的,我明白了 @Tar - FreedomOfSpeech

4
@Tar,为什么不试试这个:
var paddingWithChar = new string ('.', lengthOfPaddingAsInt); 

Console.WriteLine ($"{p.Name}{paddingWithChar}:{p.Age,10}");

这样不行... https://repl.it/@genuinefafa/Padding-with-String-Interpolation-C - genuinefafa
这并没有回答如何使用字符串插值选择填充字符的问题。而且,它填充了年龄,这不是问题的一部分。 - Vimes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接