【发布时间】:2022-10-23 04:32:54
【问题描述】:
为什么这段代码给我一个“长度不能小于零”的错误信息?
class Fraction
{
private double Numerator = 0;
private double Denominator= 1;
public static Fraction Parse(string str)
{
Fraction newFrac = new Fraction();
int indexSlash = str.IndexOf("/");
newFrac.Numerator = int.Parse(str.Substring(0, indexSlash));
newFrac.Denominator = int.Parse(str.Substring(indexSlash + 1));
return newFrac;
}
}
【问题讨论】:
-
str中没有字符/,所以indexSlash是 -1。 -
如果
str不包含/然后str.IndexOf("/");返回-1(所以indexSlash == -1)和str.Substring(0, indexSlash)抛出异常 -
显示您传递给
Parse()方法的内容会有所帮助,以便确定知道,但听起来原因就是每个人都在说什么。你的分数没有/字符,因此它返回-1。 -
好吧,使用调试器单步执行您的代码并观察变量的值。如果你这样做,你会注意到索引斜线确实会小于零。你为什么问?好吧,查看 string.IndexOf 的官方文档,它解释了这一点......