方法string.Replace()不起作用
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");
- 为什么C#switch语句不允许使用typeof / GetType()?
- 如何从xml文件中读取单个节点值
- 数据网格中没有绑定路径(wpf)
- 在gridview中合并合并标题列?
- 用于WCF服务的VS2003 Web参考具有额外的“IdSpecified”参数
- 如何将StreamReader转换为字符串?
- 无法从程序集’itextsharp,Version = 5.5.5.0,Culture = neutral,PublicKeyToken = 8354ae6d2174ddca’加载类型’iTextSharp.text.html.HtmlParser’
- 在XDocument中定位和设置元素值的最有效方法是什么?
- ListBox里面的CheckBox