【问题标题】:Method string.Replace( ) doesn't work [duplicate]方法 string.Replace() 不起作用[重复]
【发布时间】:2014-05-13 06:17:04
【问题描述】:
    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() 时,它不起作用。 此方法前后的值相同。 为什么?

【问题讨论】:

    标签: c# string random


    【解决方案1】:

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

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

    【讨论】:

    • 好的,谢谢,但为什么我写错了没有错误?
    • 我会在 10 分钟内接受
    • @user3461906 因为调用方法并忽略返回值在技术上不是错误
    • 调用方法忽略返回值不是错误。
    • @user3461906 因为不需要使用返回值,这里是Replace返回的
    【解决方案2】:

    它有效。它只是没有按照你的想法去做:它没有编辑 现有的 string:它创建了一个 new 字符串。试试:

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

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

    【讨论】:

      【解决方案3】:

      问题是该方法不会更改您调用该方法的字符串,但会返回另一个出现的字符串,因此您应该将其分配给另一个对象以使更改持续存在,因为字符串是非可变对象:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2018-02-23
          • 2013-02-07
          • 2011-11-30
          • 1970-01-01
          • 2014-04-19
          • 2011-08-25
          • 2013-03-05
          • 1970-01-01
          相关资源
          最近更新 更多