2016-05-19 61 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()方法只接受char值(而不是字符串)。

我會使用替代,但它必須是隻有當它在字符串的結束,只有它是最後一個字符是一個@符號。

+0

看來你不重新分配TrimEnd結果到一個新的(或相同)的字符串 – Steve

回答

7

TrimEnd是一個返回更改值的函數。您實際上並沒有在您的代碼中實際分配修剪後的字符串值(回到變量)。

你的代碼更改爲:

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

我這樣的傻瓜。這是漫長的一天。我一直在用頁眉,頁腳,頁邊距,橫向視圖,不同的第一頁以及不在元素內部打破的表格格式來打印可打印頁面......在CHROME中! (IE瀏覽器比Chrome瀏覽器的頁面更好)所以,我想我只是感到心慌。感謝您發現我的菜鳥般的錯誤! – VoidKing

+0

粗糙的一天!在回家的路上不要開車到樹上。 –

+0

大聲笑,好吧,如果我將同樣的錯誤應用到C#的駕駛中,我只會在外面拿着鑰匙在我手中,但沒有車......大聲笑。再次感謝! – VoidKing

5

string.TrimEnd()沒有修改字符串,而是創建一個帶有反射改變一個新的字符串。 C#中的字符串是不可變的,所以這是預期的行爲和其他字符串方法的工作方式相似。

試試這個:

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

我就是這樣一個笨蛋。這是漫長的一天。我一直在用頁眉,頁腳,頁邊距,橫向視圖,不同的第一頁以及不在元素內部打破的表格格式來打印可打印頁面......在CHROME中! (IE瀏覽器比Chrome瀏覽器的頁面更好)所以,我想我只是感到心慌。感謝您發現我的菜鳥般的錯誤! – VoidKing

+0

@VoidKing我們都有過這些日子。 – itsme86

相關問題