C# 方法string.Replace()不';行不通

C# 方法string.Replace()不';行不通,c#,string,random,C#,String,Random,在a.替换()之后,再次执行以下操作: public string Generate() { RandomNumberGenerator rdng = new RNGCryptoServiceProvider(); byte[] bytes = new byte[40]; rdng.GetBytes(bytes); string a = Convert.ToBase64String(bytes);

a.替换()之后,再次执行以下操作:

    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== ;
我想在我的
C#
项目中生成唯一的值。 一切都很好。 但是当我想调用
string.Replace()
时,它不起作用。 此方法前后的值相同。
为什么?

替换方法返回一个新的字符串对象,它不修改现有的字符串。以下声明应该有效:

a=43TvtRvrTrt54g5gtbrTTBR45iu+zqbB03gXej== ;

它起作用了。它只是不做你想的:它不编辑现有的
字符串
:它创建一个新字符串。尝试:

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

这是因为
string
不可变的:它们在创建后不会更改(至少,如果您可能正在查看的话不会更改-有一些例外,如
StringBuilder
的内部,但这些是您不应该看到的实现细节)

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

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

Replace不是修改字符串,而是返回一个新字符串。由于这使其具有可链接性,因此解决方案可能类似于:

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

好的,谢谢,但是如果我写错了,为什么我没有出错呢?我会在10分钟内接受mitunes@user3461906因为从技术上讲,调用一个方法并忽略返回值不是错误,调用一个方法并忽略返回值也不是错误。@user3461906因为不需要使用返回值,返回值由Replace here返回
a = a.Replace("=", "r").Replace("+", "t");