为什么我会:
Index and length must refer to a location within the string.
Parameter name: length
编译此代码时: http://pastebin.com/CW4EcCM8
其中的一部分:
public string findFileEnding(string file)
{
int index1 = file.IndexOf('.');
file = file.Substring(index1, file.Length);
return file;
}
感谢;)
答案 0 :(得分:4)
我认为Path.GetExtension
可能是OP可能想要的东西。
请注意,它会返回.
之类的.exe
http://msdn.microsoft.com/en-us/library/system.io.path.getextension.aspx
答案 1 :(得分:2)
Substring
的第二个参数(如果存在)是子字符串的所需长度。所以你要求的字符串长度与file
相同,但是从一个可能不同于0的位置开始。这会使你的子字符串的结尾超过file
的结尾。
假设您希望从位置file
开始获取所有index1
,您可以完全忽略第二个参数:
file = file.Substring(index1);
为了使这一点更加健壮,你需要再进行一些检查:
file
可能是null
。IndexOf
的返回值可能为-1
。如果file
不包含点,则会发生这种情况。答案 2 :(得分:0)
这不是编译器错误,这是运行时错误。
请注意String.Substring(int, int)
的文档:
从此实例中检索子字符串。子字符串从指定的字符位置[
startIndex
]开始,并具有指定的长度[length
]。
所以子串将具有指定的长度。因此,必须有足够的字符从startIndex
开始返回指定长度的子字符串。因此,String.Substring
必须满足以下不等式才能在s
的实例string
上成功:
startIndex >= 0
length >= 0
length > 0 implies startIndex + length <= s.Length
请注意,如果您只想要从index
到字符串末尾的子字符串,则可以说
s.Substring(index);
这里,唯一的约束是
startIndex>= 0
startIndex < s.Length
答案 3 :(得分:0)
你会想做这样的事情:
public string FindFileEnding(string file)
{
if (string.IsNullOrEmpty(file))
{
// Either throw exception or handle the file here
throw new ArgumentNullException();
}
try
{
return file.Substring(file.LastIndexOf('.'));
}
catch (Exception ex)
{
// Handle the exception here if you want, or throw it to the calling method
throw ex;
}
}