方法字符串.替换( ) 不起作用

本文关键字:不起作用 替换 字符串 方法 | 更新日期: 2023-09-27 17:56:00

    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()时,它不起作用。此方法之后和之前的值相同。为什么?

方法字符串.替换( ) 不起作用

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

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

它有效。它只是不做你想的那样:它不编辑现有的string:它创建一个字符串。尝试:

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

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

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

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

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

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