方法字符串.替换( ) 不起作用
本文关键字:不起作用 替换 字符串 方法 | 更新日期: 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");