使用PadRight方法填充字符串

20

我正在尝试在C#中给字符串末尾添加空格:

Trip_Name1.PadRight(20);

还尝试了以下方法:

Trip_Name1.PadRight(20,' ');

所有的方法似乎都不起作用。然而,我可以使用任何其他字符填充该字符串。为什么?

我应该更加具体,这是完整代码:

lnk_showmatch_1.Text = u_trip.Trip_Name1.PadRight(20,' ');

1
你的测试中Trip_Name1是什么?这些方法的返回值是什么(即“似乎不起作用”是什么意思)?你知道这些方法不会修改Trip_Name1的值,对吗? - Michael Petrotta
1
你能提供代码示例吗?顺便说一下,字符串是不可变的,你必须在填充后重新分配结果值。 - default locale
我应该更加具体,这是完整的代码:lnk_showmatch_1.Text = u_trip.Trip_Name1.PadRight(20,' '); - Bruce
2个回答

29

字符串是不可变的,它们不能被更改。 PadRight方法返回一个填充后的新实例,而不是更改调用它的字符串实例本身。你需要的是这个:

Trip_Name1 = Trip_Name1.PadRight(20,' ');

这个StackOverflow问题有一些很棒的讨论,解释了为什么字符串是不可变的。

编辑:

似乎这些都不起作用。不过我可以使用任何其他字符填充该字符串。

你是否像上面的示例那样重新分配了它?如果是这种情况-除非有更多细节,否则我只能想到以下几点:

  1. 如果您将其存储在数据库中并检索它,则某些具有正确设置的数据库可能会为您“修整”。
  2. 您在其他地方的逻辑中裁剪了空格。处理用户输入时,这很常见。

编辑2:

我应该更加具体

我要根据您的命名惯例猜测您正在处理HTML / ASP.NET。 在大多数情况下,在HTML中 - 空格被折叠。例如:

<div><a>Hello           World</a></div>
<div><a>Hello World</a></div>

由于空格被折叠了,所以两个a标签将呈现相同的效果。如果您确实在使用HTML-这很可能是您的原因,也是为什么填充对所有其他字符都有效的原因。如果您查看呈现的标记的源代码-是否包含额外的空格?

如果您想保留空格,请尝试在元素上应用名为white-space的CSS样式,并将其设置为pre。例如:

<a style="white-space:pre">hello     world      </a>

这将导致空格被保留。请记住,像这样使用空格有其缺点。浏览器不会以相同的方式渲染它们等等。我不会将其用于布局目的。考虑使用 CSS 和类似 min-width 的东西代替。


@user554134 - 根据您的更新,我进行了一些编辑。 - vcsjones
我也遇到了同样的问题。代码如下:var str = INRECField.PadRight(11, ' ') + INRECDate?.ToString("MMddyy") + INRECModel.PadRight(12, ' ') + INRECSerial.PadRight(14, ' ') + INRECAccessCode.PadRight(5, ' '); str = str.PadRight(32, ' '); - user2831855

4

请记住,这种方式并不适用于任何字符串操作功能,因为字符串是不可变的。它们只返回一个新的字符串,而不是更新现有实例。

PadRight 返回一个新的字符串,通过使用指定的 Unicode 字符向右填充该字符串中的字符,以达到指定的总长度,从而左对齐它们。

string Trip_Name1 = Trip_Name1.PadRight(20,' ');

编辑:

您的控件似乎会修剪结尾的空格。因此,尝试设置控件的填充而不是文本的填充。


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