【问题标题】:Ref parameters not changing value? c#参考参数不改变值? C#
【发布时间】:2019-03-16 16:52:37
【问题描述】:

我目前正在为大学工作编写一个简单的程序,并使用一个函数来检测字符串中的字符并删除它们,该函数应该输出一个 bool 并且新字符串应该在一个引用参数中但是引用参数不起作用,数据没有被结转?

    public static bool DetectAndRemoveCharacter(ref string Word, char Character)
    {
        bool returnVal = false;
        for (int x = 0; x < Word.Length; x++)
        {
            if (Word[x] == Character)
            {
                Word.Remove(x, 1);
                returnVal = true;
                break;
            }
        }
        return returnVal;
    }

bool 被返回但 (Letters) 没有被改变,这可能是一些简单的事情,但我不认为 refs 使用起来太复杂,我可以尝试使用返回对象列表来修复它,但是它如果我能以这种方式完成它会简单得多。

Set = DetectAndRemoveCharacter(ref Letters, '?');

【问题讨论】:

    标签: c# function parameters reference


    【解决方案1】:

    字符串是不可变的对象,不能更改。 Remove 方法不会更改原始对象,您必须将结果重新分配给变量:

    Word = Word.Remove(x, 1);
    

    【讨论】:

      【解决方案2】:

      字符串在.net 中是不可变的。这意味着每次更改字符串时,都会返回一个新字符串。原始字符串未更改。您的代码没有捕捉到这一点。

      试试:

      public static bool DetectAndRemoveCharacter(ref string Word, char Character)
      {
          bool returnVal = false;
          for (int x = 0; x < Word.Length; x++)
          {
              if (Word[x] == Character)
              {
                  // assign value here
                  Word = Word.Remove(x, 1);
                  returnVal = true;
                  break;
              }
          }
          return returnVal;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-03
        • 1970-01-01
        • 2010-12-12
        相关资源
        最近更新 更多