方法string.Replace()不起作用

时间:2014-04-02 06:42:44

标签: c# string random

    public string Generate()
    {
        RandomNumberGenerator rdng = new RNGCryptoServiceProvider();
        byte[] bytes = new byte[40];

        rdng.GetBytes(bytes);

        string a = Convert.ToBase64String(bytes); 

        a.Replace("=", "r");
        a.Replace("+", "t");

        return a;
    }

a=43TvtRvrTrt54g5gtbrTTBR45iu+zqbB03gXej== ;
再次a.Replace()之后

a=43TvtRvrTrt54g5gtbrTTBR45iu+zqbB03gXej== ;

我想在C#项目中生成唯一值。 一切都很棒。 但是当我想打电话给string.Replace()时,它不起作用。 此方法之前和之后的值相同。 为什么?

4 个答案:

答案 0 :(得分:9)

replace方法返回一个新的字符串对象,它不会修改现有的字符串。以下陈述应该有效:

a = a.Replace("=", "r");

答案 1 :(得分:6)

有效。它只是没有按你的想法行事:它不会编辑现有的 string:它会创建一个 new 字符串。尝试:

    a = a.Replace("=", "r");
    a = a.Replace("+", "t");

这是因为string不可变的:它们一旦创建就不会改变(至少,如果您可能正在寻找,则不会改变 - 有一些例外情况,例如{{1}的内部,但那些是您不应该看到的实现细节)

答案 2 :(得分:2)

问题是该方法不会更改您调用方法的字符串,但会返回另一个字符串,因此您应该将其分配给另一个对象,以便更改保持不变,因为字符串是非字符串可变对象:

a=a.Replace("=", "r");
a=a.Replace("+", "t");

答案 3 :(得分:2)

String.Replace不是修改a,而是返回一个新的String。由于这使其可链接,因此解决方案可能如下所示:

a = a.Replace("=", "r").Replace("+", "t");