哪一个更安全?将“for”放在“尝试”中,或将“Try”放在“for”中
本文关键字:放在 for 或将 Try 尝试 哪一个 安全 | 更新日期: 2023-09-27 18:30:37
我有这段代码,我想知道它们是否同样工作,只是它们的速度不同或它们的行为完全不同?
try
{
for (int i = Start; i < End; i++)
{
src.Samples[i].x = i;
src.Samples[i].y = HR[i];
}
}
catch{}
或
for (int i = Start; i < End; i++)
{
try
{
src.Samples[i].x = i;
src.Samples[i].y = HR[i];
}
catch
{
break;
}
}
只是一开始就不要这样做 - 这是对例外的滥用,IMO。编写代码,使其安全,无需尝试/捕获。如果您不知道HR
是否足够长,请使用:
int cappedEnd = Math.Min(HR.Length, End);
for (int i = Start; i < cappedEnd; i++)
{
src.Samples[i].x = i;
src.Samples[i].y = HR[i];
}
(如果可能无效,请使用类似的逻辑Start
。
如果你觉得出于某种原因你绝对必须使用 try/catch,我会抓住你期望被扔出的确切类型,并将其放在循环的外侧 - 捕捉只是为了打破对我来说感觉更糟。不,无论哪种方式,我都不会期望有任何显着的性能差异。
主要区别在于,将逻辑封装在 try 语句中将使您能够捕获可能发生的任何错误/异常。
在列出的第二个示例中,您可能会收到异常,因为 Start 和/或 End 由于某种原因成为无效值,或者其他原因导致您无法捕获的崩溃。
请注意,该级别的大多数代码通常非常简单,并且不太容易出错。不过,编写没有异常的代码通常是更好的方法。
如注释中所述,您在第一个示例中需要一个 catch 块才能使其工作。
我希望你是一个初学者(像我一样),所以你期待这样的答案
我再举一个例子。
第一个代码
try{
foreach(file in files)
{
upload(file);
}
}
catch(Exception ex)
{
handleException(ex);
}
第二个代码
foreach(file in files)
{
try{
upload(file);
}
catch(Exception ex)
{
handleException(ex);
}
}
在第一个代码上,当第一个代码失败时,所有文件上传都将停止。在第二个,如果一个失败,则处理异常本身,代码继续执行下一次执行。
因此,在您给出的示例中,两者似乎都以相同的方式工作(因为您在 catch 块中给出了中断。其他明智的两者都是不同的)。因此,请尝试在真正需要处理的地方捕获。