使用for循环替换.NET C#模型中的字符串字符

时间:2013-04-16 15:54:25

标签: c# asp.net-mvc variables

我是.NET MVC的新手,来自PHP / Java / ActionScript。

我遇到的问题是.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("--", "-");

2 个答案:

答案 0 :(得分:8)

来自MSDN

string 不可变

  

字符串是不可变的 - 创建对象后,字符串对象的内容无法更改,尽管语法使其看起来好像可以这样做。

所以你需要再次分配:

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

答案 1 :(得分:2)

您没有将Replace()的值分配给任何内容。它返回结果,不会修改它操作的字符串。 (字符串是不可变的)。