2011-09-05 17 views
9

Próbuję dodać obowiązuje do końca ciągu znaków w języku C#:Dopełnienie ciąg przy użyciu metody PadRight

Trip_Name1.PadRight(20); 

próbował również:

Trip_Name1.PadRight(20,' '); 

Żaden z tym wydaje się działać. Mogę jednak podłożyć strunę dowolną inną postacią. Czemu?

Powinienem być bardziej szczegółowe, tutaj jest pełny kod:

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

Co to jest 'Trip_Name1' w twoich testach? Jaka jest wartość zwracana tych metod (tj. Co "* wydaje się nie działać" *)? Jesteś świadomy, że te metody nie zmienią wartości 'Trip_Name1', prawda? –

+1

Czy możesz podać przykładowy kod? Nawiasem mówiąc, ciągi są niezmienne i musisz ponownie przypisać wartość wyniku po dopełnieniu –

+0

Powinienem być bardziej szczegółowy, tutaj jest pełny kod: lnk_showmatch_1.Text = u_trip.Trip_Name1.PadRight (20, ''); – Bruce

Odpowiedz

23

String są immutable, nie mogą być zmieniane. PadRight zwraca nową instancję łańcucha wyściełaną, nie zmieniając tej, z której została wywołana. Co chcesz to:

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

Istnieje wielka dyskusja na this StackOverflow pytanie, dlaczego ciągi są niezmienne.

EDIT:

Żaden z tym wydaje się działać. Mogę jednak podłożyć strunę dowolną inną postacią.

Czy w rzeczywistości przypisujesz je tak, jak w powyższym przykładzie? Jeśli tak jest w istocie - to bez bardziej szczegółowo mogę myśleć tylko o następujące elementy:

  1. Jeśli przechowywania tego w bazie danych i pobieranie go, niektóre bazy danych z prawidłowymi ustawieniami może „Trim” dla Ciebie.
  2. Masz logikę w innym miejscu, która przycina białe przestrzenie. Jest to powszechne w przypadku wprowadzania danych przez użytkownika.

EDIT 2:

I powinien być bardziej konkretny

Idę wziąć dzikie przypuszczenie na podstawie konwencji nazewnictwa, że ​​masz do czynienia z HTML/ASP.NET. W większości przypadków w HTML - white space is collapsed. Na przykład:

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

Oba a tagów uczyni to samo, ponieważ white-space jest zwinięty. Jeśli rzeczywiście pracujesz z HTML-em to prawdopodobnie jest twój powód i dlaczego wyściółka działa dla wszystkich innych postaci. Jeśli tworzysz widok źródła renderowanego znacznika - czy zawiera on dodatkowe białe spacje?

Jeśli chcesz zachować białe spacje, spróbuj zastosować styl CSS na swoim elemencie o nazwie white-space i ustawić go na pre. Na przykład:

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

To spowoduje zachowanie białej przestrzeni. Należy pamiętać, że korzystanie z białej przestrzeni ma takie wady. Przeglądarki nie renderują ich w sposób identyczny itp. Nie użyłbym tego do celów układu.Rozważ skorzystanie z CSS i coś takiego jak min-width.

+0

@ user554134 - Wprowadziłem kilka dodatkowych zmian na podstawie Twojej aktualizacji. – vcsjones

+0

Dziękuję, proszę pana, white-space: pre did the trick! – Bruce

+0

Nie działa również dla mnie. Ten sam problem var str = INRECField.PadRight (11 ' ') + INRECDate? .ToString ("mmddrr") + INRECModel.PadRight (12' ') + INRECSerial.PadRight (14'') + INRECAccessCode .PadRight (5, "'); str = str.PadRight (32, ''); – user2831855

4

Należy pamiętać, że w ten sposób nie będzie działać żadna operacja ciągów, ponieważ ciąg znaków jest niezmienny. Zwracają tylko nowy ciąg, zamiast aktualizować istniejącą instancję.

PadRight zwraca nowy ciąg znaków, który lewym wyrównuje znaki w ten ciąg przez dopełnienie je po prawej stronie z określonym Unicode charakteru, dla określonej długości całkowitej.

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

EDIT:

Twój kontrola wydaje się być przycinanie kończące spacje. Tak więc spróbuj ustawić dopełnienie dla formantu, a nie dla tekstu.

Powiązane problemy