2014-10-30 59 views
2

我试了下面这段代码。我不明白为什么我继续得到一个“论证越界”的例外。为什么我会收到“参数超出范围例外”?

private void Easy_Click(object sender, EventArgs e) 
{ 
    string fileData =readFile(); 
    if (fileData.Contains(name)) 
    { 
     int i = fileData.IndexOf(name); 
     int easyScore = i + name.Length +1; 
     MessageBox.Show(fileData+" "+i); 
     string newString = fileData.Substring(45, 48); 
     Easy.Text=newString; 
    } 
} 
+7

可能你没有正确理解Substring的第二个值是什么。阅读文档 – Steve 2014-10-30 13:41:47

+0

http://msdn.microsoft.com/en-us/library/aka44szs%28v=vs.110%29.aspx – blfuentes 2014-10-30 13:42:52

+0

变量'name'是什么? – 2014-10-30 13:42:53

回答

8

Substring第二个参数是index.If你想3个字符从45开始尝试

string newString = fileData.Substring(45, 3); 
+2

如果是这样的话,他可能只是在寻找一个文件扩展名?也许只是使用Path.GetExtension? – stroebele 2014-10-30 13:50:15

+0

@stroebele - 这是假设文件包含一个文件名列表... – 2014-10-30 13:51:00

+0

@LayTaylor良好的通话,45是一个小嫌疑犯在那里,他假设fileData至少45个字符 – stroebele 2014-10-30 13:57:30

0

这是因为你在FILEDATA指数45做一个字符串的长度,而不是终点长度为48,不保证fileData足够长。要安全地执行此操作,您需要检查fileData长度至少为93个字符。

1

从你的问题来看,这有点含糊不清,但我想这是由你的Substring方法引起的。如果您的值中的任何一个大于字符串的长度,则已知这会引发ArgumentOutOfRangeException