2012-10-01 79 views
-2

我正在向下面的代碼示例傳遞不同的文件名並且出現如下錯誤。但對於相同的數據,它在我的最後工作正常,但在客戶端發出這些錯誤。String.Remove給出錯誤

如果因爲其他原因可能會發生,請提出建議。注意:這是由其他人編寫的維護代碼,我需要修復此問題,並在可能的情況下對其進行改進。

文件名示例:

 
222233334444555561_l.jpg 
222233334444555561_l1.jpg 

代碼:

if (sFileName.LastIndexOf('_') != -1) 
{ 
    if (fileName.IndexOf("l1") != -1) 
     sVin = sFileName.Remove(sFileName.LastIndexOf('_'), 7); 
    else 
     sVin = sFileName.Remove(sFileName.LastIndexOf('_'), 6); 
} 

行錯誤:

sVin = sFileName.Remove(sFileName.LastIndexOf('_'), 7); 

這意味着未來的錯誤輸入的樣品,如:222233334444555561_l1.jpg

錯誤消息:

 
ERROR MESSAGE : System.ArgumentOutOfRangeException: Index and count must refer to a location within the string. 

Parameter name: count 
    at System.String.Remove(Int32 startIndex, Int32 count) 
+0

可以將用戶的文件名有它的'l1'下劃線在什麼地方? – Rawling

+0

sVin = sFileName.Remove(sFileName.LastIndexOf('_'),7); LastIndexOf將無法從索引7中找到「_」,所以它不會返回任何字符串,因此Remove將失敗。 – MarsRover

+1

不要編寫你可能會失敗的代碼。 –

回答

1
string s = "222233334444555561_l1.jpg"; 
int underScorePos = s.LastIndexOf("_"); 
if (underScorePos != -1) 
    s = s.Substring(1, underScorePos - 1); 
+0

WOW ..這是有道理..謝謝 –

0

你可以把它簡化,以避免ArgumentOutOfRangeException異常

 int lastIndex = sFileName.LastIndexOf('_'); 
     if (lastIndex != -1) 
     { 
      sVin = sFileName.Remove(lastIndex, sFileName.Length - lastIndex); 
     }