C# 参数超出范围
我有一个变量,它有很多我需要整理的内容。 但是使用IndexOf和Substring,只会给我一个不太明显的错误 ArgumentOutOfRangeException:参数超出范围 参数名称:startIndex 错误发生在“字符串查找字符串=…”行上 我的代码只是试图通过字符串查找,找到正确的内容,然后将其吐出来C# 参数超出范围,c#,.net,string,substring,C#,.net,String,Substring,我有一个变量,它有很多我需要整理的内容。 但是使用IndexOf和Substring,只会给我一个不太明显的错误 ArgumentOutOfRangeException:参数超出范围 参数名称:startIndex 错误发生在“字符串查找字符串=…”行上 我的代码只是试图通过字符串查找,找到正确的内容,然后将其吐出来 private string SCRIPT_CONTENT; public string GetVariable(string variable_name) { int
private string SCRIPT_CONTENT;
public string GetVariable(string variable_name) {
int length = 0;
string lookThroughString = SCRIPT_CONTENT.Substring(SCRIPT_CONTENT.IndexOf(variable_name));
foreach(char c in lookThroughString) {
if(c.ToString() != ";") {
length++;
}
}
return SCRIPT_CONTENT.Substring(SCRIPT_CONTENT.IndexOf(variable_name + "::"), length);
}
我正在浏览的“脚本”/“内容”是:
spellName::Fireball;
spellID::1;
我想让这个函数基本上从输入的变量名开始(在本例中为“SpellName”)返回,直到第一个分号。问题是
变量名
变量值是“SpellName”
,但字符串中的值实际上是“SpellName”
(小写s
)。由于在字符串中实际上找不到该变量名,.IndexOf(variable\u name)
返回-1,。Substring
不能将负索引作为参数
快速解决方案是在使用IndexOf
之前,只需检查其结果:
int index = SCRIPT_CONTENT.IndexOf(variable_name);
if (index < 0) {
return string.Empty; // or throw an exception
}
string lookThroughString = SCRIPT_CONTENT.Substring(index);
没有完全解决这个问题。它返回“脚本”中的所有内容,而不是仅返回“拼写名称”行。@KevinJensenPetersen您希望它返回什么?只有
“Fireball”
或整行?实际上只有“Fireball”一词,因为这是SpellName变量包含的内容。但我试着先把电话线接过来。我明白了。。这其实很简单,我不知道为什么我没有想到这一点。我非常感谢你!你让我在解决问题的过程中避免了很多挫折。
public string GetVariable(string variable_name) {
int startIndex = SCRIPT_CONTENT.IndexOf(variable_name);
if (startIndex < 0) {
return string.Empty; // or throw an exception
}
startIndex += variable_name.Length + 2;
int endIndex = SCRIPT_CONTENT.IndexOf(";", startIndex);
return SCRIPT_CONTENT.Substring(startIndex, endIndex - startIndex);
}
public string GetVariable(string variable_name) {
var pattern = string.Format("{0}::(.*?);", Regex.Escape(variable_name));
return Regex.Match(SCRIPT_CONTENT, pattern).Groups[1].ToString();
}