Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArgumentOutOfRange异常C#_C#_Streamreader_Textreader - Fatal编程技术网

ArgumentOutOfRange异常C#

ArgumentOutOfRange异常C#,c#,streamreader,textreader,C#,Streamreader,Textreader,我正在做我的家庭作业,我必须做一个程序,将简单的字母从一个文件(如E和F)扩展到连续的产品,也在文件夹中给出,如E+T E-F等。无论如何,下面显示的代码给了我一个参数超出范围的异常。我用java编写了相同的代码,一切都很好。我不知道为什么在C中,它给了我这个例外。请给我一些建议 我忘了放我正在读取的文件: EFT a+() E E+T | E-T | T T*F | T/F | F a |(E) public void generare(){ 字符串N=null; 字符串T=null; 字符串

我正在做我的家庭作业,我必须做一个程序,将简单的字母从一个文件(如E和F)扩展到连续的产品,也在文件夹中给出,如E+T E-F等。无论如何,下面显示的代码给了我一个参数超出范围的异常。我用java编写了相同的代码,一切都很好。我不知道为什么在C中,它给了我这个例外。请给我一些建议

我忘了放我正在读取的文件:

EFT

a+()

E

E+T | E-T | T

T*F | T/F | F

a |(E)

public void generare(){
字符串N=null;
字符串T=null;
字符串S=null;
字符串[]P=null;
TextReader tr=新的StreamReader(“dateIntre.txt”);
尝试
{
N=tr.ReadLine();
T=tr.ReadLine();
S=tr.ReadLine();
P=新字符串[N.长度];
对于(int i=0;i=0&&ok==false;i--)
{
对于(int j=0;j”;
}
}
}
捕获(FileNotFoundException)
{
控制台.WriteLine(“Eroare,fisierul nu exista!”);
}
Console.WriteLine();
}

将代码从Java移植到c#时,这是一个常见错误

Java中的子字符串接受开始和结束参数,但在c中,它们是开始和长度

但为什么在java中工作而在这里不工作呢?我很困惑

如果有疑问,请阅读。在Java中,
substring
的2参数重载采用开始索引和结束索引。在.NET中,第二个参数是要获取的字符数,而不是结束索引

所以你可能想要

String s2 = iesire.Substring(i + 1, iesire.Length - i - 1);
或者更简单地说,只需使用1参数版本,它从指定索引开始获取所有字符:

String s2 = iesire.Substring(i + 1);
(我也会在Java中使用它…)

但从根本上说,退一步,找出为什么你不能自己解决这个问题是值得的。。。即使您以前错过了:

  • 查看代码中引发异常的行
  • 查看实际抛出异常的方法(本例中为
    String.Substring
  • 仔细查看异常消息(这是一个非常好的提示!)以及任何嵌套的异常
  • 仔细阅读相关方法的文档,尤其是描述参数和异常的部分

您也可以发布stacktrace!>gensiruri.exe!gensiruri.Generare.Generare()第66行#我认为在使用子字符串时有一个错误。唯一的错误就在这里字符串s2=iesire.Substring(I+1,iesire.Length);但为什么在java中工作而在这里不工作呢?我很困惑:|。@Cotan Mircea它一定是iesire.Length-I。java中的子字符串和.net中的子字符串之间存在差异。
String s2 = iesire.Substring(i + 1);