C# 哪个更安全?把;至于;在“a”中;试试看,或在;试一试;在一个;为了“什么?”;?
我有这段代码,我想知道它们的工作原理是一样的,只是它们的速度不同,还是它们的行为完全不同C# 哪个更安全?把;至于;在“a”中;试试看,或在;试一试;在一个;为了“什么?”;?,c#,performance,if-statement,try-catch,C#,Performance,If Statement,Try Catch,我有这段代码,我想知道它们的工作原理是一样的,只是它们的速度不同,还是它们的行为完全不同 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
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
或
for(int i=Start;i
主要区别在于,将逻辑封装在try语句中可以捕获可能发生的任何错误/异常
在您列出的第二个示例中,您可能会得到一个异常,因为出于某种原因,Start和/或End是无效值,或者其他原因导致您无法捕获的崩溃
请注意,该级别的大多数代码通常非常简单,不太容易出错。
不过,编写没有异常的代码通常是更好的方法
正如在注释中所述,在您的第一个示例中,您需要一个catch块才能使其工作。首先不要这样做-这是对异常的滥用,我认为。编写代码是为了在不使用try/catch的情况下安全。如果您不知道
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];
}
int cappedEnd=Math.Min(HR.Length,End);
for(int i=Start;i
(如果Start
可能无效,请使用类似的逻辑。)
如果你觉得出于某种原因必须使用try/catch,我会捕捉到你期望抛出的确切类型,并将其放在循环的外部-捕捉只是为了打破对我来说感觉更糟。不,我不希望在任何方面有任何显著的性能差异。我希望你是一个初学者(和我一样),所以你希望得到这样的答案
我再举一个例子
第一代码
第二代码
在第一个代码中,当第一个失败时,所有文件上传都将停止。在第二种情况下,若一个失败,那个么处理异常本身,代码继续进行下一次执行
所以在这个例子中,你们给出的两种方法似乎都是以相同的方式工作的(因为你们给出的是在断开捕捉块中。其他方面,两者都是不同的)。因此,在真正需要处理的地方使用try-catch。因为没有catch块,所以您的第一个操作甚至无效。您希望捕获哪些异常,如果抛出这些异常,您希望发生什么?我之所以没有编写捕获,是因为将问题缩短了我在编辑中添加了它,我希望程序在“i”超过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];
}
try{
foreach(file in files)
{
upload(file);
}
}
catch(Exception ex)
{
handleException(ex);
}
foreach(file in files)
{
try{
upload(file);
}
catch(Exception ex)
{
handleException(ex);
}
}