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