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