2014-10-30 58 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