回 帖 发 新 帖 刷新版面

主题:有关TRY块的问题

代码段一:

while ( true ){

  str = sr.ReadLine();
  if ( str == null )
    {
      break;
     }
//try {
str  = str.Substring(0,5) + "         " + str.Substring (6,1) 
str += str.Substring(8,1) + str.Substring (10,1) ;
total++;
listbox.Items.Add( " " + total.ToString().PadLeft(3)  + "         " + str );
//}
//catch{
      //}
 }    // end of while





代码段二:

while ( true ){

  str = sr.ReadLine();
  if ( str == null )
    {
      break;
     }
try {
str  = str.Substring(0,5) + "         " + str.Substring (6,1) 
str += str.Substring(8,1) + str.Substring (10,1) ;
total++;
listbox.Items.Add( " " + total.ToString().PadLeft(3)  + "         " + str );
}
catch{
      }
 }    // end of while



代码段一和二的唯一不同之处就在于代码二有一TRY块.
问题: 以上两段代码在.NET 环境中运行均OK,结果也一致.但编译成EXE文件后,代码段
二运行正常,但代码段一运行到
str  = str.Substring(0,5) + "         " + str.Substring (6,1) 
语句时便出现运行时错误,说是STRING转换函数超界.
这两段代码运行环境一样,我可以肯定不存在超界的情况,这是怎么回事?

回复列表 (共5个回复)

沙发

运行环境一样不能代表什么,关键要看你输入的信息是什么
Substring(i,j)方法中i+j要小于字符串长度且i>0,j>0

板凳

i 应该可以等于0 吧?
str = sr.ReadLine();读取的是同一个文件,所以肯定不存在下界超标的问题.(原因之一,此文件中的所有行一样长, 原因之二, 我扳着指头数了的,^_^,原因之三,为何加了TRY块之后不报运行时错误?TRY块实际上什么也没做)

3 楼


当TRY段代码出错的时候,程序不会报错,而是转到CATCH{}代码段去了

你的catch{}没有代码,也就等于什么都不做了.

4 楼

i,j>=0刚才上贴中写错了

5 楼

3楼的,你没明白我的意思,
实际上,加了TRY块之后,程序就不报运行时错误了,也可以得出正确结果.(以上代码段只是完整程序的一部分)
实际上以上两段代码在编译器环境中都可以得到同样的结果.(请注意此条)
为何编译成.EXE文件之后,只有加了TRY块的代码才能运行?

我来回复

您尚未登录,请登录后再回复。点此登录或注册