2013-04-16 42 views
0

我是.NET MVC的新手,來自PHP/Java/ActionScript。使用for循環替換.NET C#模型中的字符串字符

我遇到的問題是.NET模型和get{}。我不明白爲什麼我的Hyphenize字符串將返回值SomeText截斷爲64個字符,但不替換數組中定義的任何字符。

模式 - 這應該用一個簡單的連字符-替換SomeText某些字符:

public string SomeText{ get; set;} // Unmodified string 

    public string Hyphenize{ 
     get { 
      //unwanted characters to replace 
      string[] replace_items = {"#", " ", "!", "?", "@", "*", ",", ".", "/", "'", @"\", "=" }; 
      string stringbuild = SomeText.Substring(0, (SomeText.Length > 64 ? 64 : SomeText.Length)); 

      for (int i = 0; i < replace_items.Length; i++) 
      { 
       stringbuild.Replace(replace_items[i], "-"); 
      } 

      return stringbuild; 
     } 

     set { } 
    } 

或者,下面的方法不正確地工作,將返回字符串" ""#"字符替換。然而,它讓我困惑,我無法理解for循環爲什麼不起作用。

public string Hyphenize{ 
     get { 
      //Replaces unwanted characters 
      return SomeText.Substring(0, (SomeText.Length > 64 ? 64 : SomeText.Length)).Replace(" ", "-").Replace("#", "-"); 
     } 

     set { } 
    } 

最後,我結束了與

return Regex.Replace(SomeText.Substring(0, (SomeText.Length > 64 ? 64 : SomeText.Length)).Replace("'", ""), @"[^a-zA-Z0-9]", "-").Replace("--", "-"); 

回答

8

string不變,從MSDN

字符串是不可變 - 一個字符串對象後不能更改的內容對象被創建,儘管語法使得它看起來好像你可以做到這一點。

,所以你需要有重新分配:

stringbuild = stringbuild.Replace(replace_items[i], "-"); 
2

你不是Replace()值分配給什麼。它返回它的結果,並且不修改它操作的字符串。 (字符串是不可變的)。