Ref参数没有改变值?C#

3

我目前为大学作业编写一个简单的程序,使用一个函数来检测字符串中的字符并将其删除,该函数应输出一个布尔值,并在引用参数中传递新字符串,但是引用参数未能正常工作,数据未被传递过去?

    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;
    }

返回了布尔值,但(Letters)未被更改。这可能很简单,但我认为使用引用并不会太复杂,我可以尝试使用返回对象列表来修复它,但如果能以这种方式完成将会更加简单。

Set = DetectAndRemoveCharacter(ref Letters, '?');
2个回答

4

字符串是不可变对象,不能被更改。方法Remove不会改变原始对象,您需要将结果重新赋值给变量:

Word = Word.Remove(x, 1);

3

.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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接