引用参数不更改值? c#

时间:2019-03-16 16:52:38

标签: c# function parameters reference

我目前正在编写一个用于大学工作的简单程序,并使用一个函数来检测字符串中的字符并将其删除,该函数应该输出布尔值,而新字符串应包含在引用参数中,但是引用参数不起作用,数据也无法传递?

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

返回布尔值,但是(字母)没有被更改,这可能很简单,但是我认为ref的使用不会太复杂,我可以尝试使用返回对象列表对其进行修复,但是如果我能这样完成的话,会简单得多。

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

2 个答案:

答案 0 :(得分:4)

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

Word = Word.Remove(x, 1);

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