2016-05-19 6 views
0

У меня есть строка, которая заканчивается @ и при попытке TrimEnd этой строки (я хочу только обрезать ее, если символ @ действительно находится в конце этой строки), я считаю, что C# полностью игнорирует это.Почему C# .TrimEnd работает с символом @?

Я написал (с помощью Razor; и это запрос Ajax) два скрытых поля ввода для хранения строкового значения как до, так и после вызова .TrimEnd('@'), и значение остается неизменным.

Невозможно закодировать это значение, поскольку строка построена на C# и не оставляет эту среду (которая в конечном итоге относится к базе данных), прежде чем я смогу доказать, что она не работает.

(переменная «NFPA» содержит строку «3-2-0»)

string NFPAFPRACHGLOES = ""; 

if (!String.IsNullOrWhiteSpace(NFPA)) 
{ 
    NFPAFPRACHGLOES += NFPA + "\n"; 
} 

if (FBtn == "on") 
{ 
    NFPAFPRACHGLOES += "F"; 
} 

if (PBtn == "on") 
{ 
    if (NFPAFPRACHGLOES.Contains("F")) 
    { 
     NFPAFPRACHGLOES += "/"; 
    } 

    NFPAFPRACHGLOES += "P"; 
} 

if (RBtn == "on") 
{ 
    if (NFPAFPRACHGLOES.Contains("F") || NFPAFPRACHGLOES.Contains("P")) 
    { 
     NFPAFPRACHGLOES += "/"; 
    } 

    NFPAFPRACHGLOES += "R"; 
} 

if (ABtn == "on") 
{ 
    if (NFPAFPRACHGLOES.Contains("F") || NFPAFPRACHGLOES.Contains("P") || NFPAFPRACHGLOES.Contains("R")) 
    { 
     NFPAFPRACHGLOES += "/"; 
    } 

    NFPAFPRACHGLOES += "A"; 
} 

if (CHBtn == "on") 
{ 
    if (NFPAFPRACHGLOES.Contains("F") || NFPAFPRACHGLOES.Contains("P") || NFPAFPRACHGLOES.Contains("R") || NFPAFPRACHGLOES.Contains("A")) 
    { 
     NFPAFPRACHGLOES += "/"; 
    } 

    NFPAFPRACHGLOES += "CH"; 
} 

NFPAFPRACHGLOES += "@"; //<--This is where the @ symbol gets added. 

if (GBtn == "on") 
{ 
    NFPAFPRACHGLOES += "G"; 
} 

if (LBtn == "on") 
{ 
    NFPAFPRACHGLOES += "L"; 
} 

if (OBtn == "on") 
{ 
    NFPAFPRACHGLOES += "O"; 
} 

if (EBtn == "on") 
{ 
    NFPAFPRACHGLOES += "E"; 
} 

if (SBtn == "on") 
{ 
    NFPAFPRACHGLOES += "S"; 
} 

//NFPAFPRACHGLOES = NFPAFPRACHGLOES.Trim(); 

NFPAFPRACHGLOES.TrimEnd('\n'); 
<input type="hidden" id="dumb1" value="@NFPAFPRACHGLOES" /> <-- read value before trimend call 
NFPAFPRACHGLOES.TrimEnd('@'); 
<input type="hidden" id="dumb2" value="@NFPAFPRACHGLOES" /> <-- read value after trimend call. 

Вот что я получаю зачитал мне в предупреждающем сообщении после того, как он вернется из вызова AJAX.

enter image description here

Я хотел бы попробовать и передать в ASCII кодируются версии персонажа, чтобы посмотреть, что происходит, но, как вы знаете, метод .TrimEnd() принимает только полукокса значения (и не строки).

Я бы воспользовался заменой, но это должно быть только в том случае, если оно находится в конце строки, и только это последний символ является символом @.

+0

кажется, что вы не переназначить результат TrimEnd на новую (или же) строку – Steve

ответ

7

TrimEnd - это функция, которая возвращает измененное значение. Вы фактически не назначаете строковое строковое значение (обратно к переменной) в своем коде как есть.

Изменить код:

NFPAFPRACHGLOES = NFPAFPRACHGLOES.TrimEnd('\n') 
+0

Я такой осел. Это был такой долгий день. Я форматировал печатаемые страницы с заголовками, нижними колонтитулами, полями, пейзажным видом, другой первой страницей и строками таблицы, которые не разбиваются внутри элемента ... IN CHROME! (IE лучше печатает страницы, чем Chrome) Итак, я думаю, я просто взволнован. Спасибо, что заметили мою новичковую ошибку! – VoidKing

+0

Грубый день! Не входите в дерево по дороге домой. –

+0

LOL, ну, если бы я применил такую ​​же ошибку к вождению, что я только что сделал с C#, я останусь снаружи с моими ключами в руке, но не с машиной ... lol. Еще раз спасибо! – VoidKing

5

string.TrimEnd() не изменяет строку, а создает новую строку с отраженными изменениями. Строки в C# неизменяемы, поэтому ожидается, что поведение и другие строковые методы будут работать аналогичным образом.

Попробуйте это:

NFPAFPRACHGLOES = NFPAFPRACHGLOES.TrimEnd('@'); 
+0

Я такой осел. Это был такой долгий день. Я форматировал печатаемые страницы с заголовками, нижними колонтитулами, полями, пейзажным видом, другой первой страницей и строками таблицы, которые не разбиваются внутри элемента ... IN CHROME! (IE лучше печатает страницы, чем Chrome) Итак, я думаю, я просто взволнован. Спасибо, что заметили мою новичковую ошибку! – VoidKing

+0

@VoidKing У всех нас были те дни. – itsme86

Смежные вопросы