Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
C# 哪个更安全?把;至于;在“a”中;试试看,或在;试一试;在一个;为了“什么?”;?_C#_Performance_If Statement_Try Catch - Fatal编程技术网

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);
       }
   }