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");