Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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# 处理异常与从一开始就防止它们发生-C_C#_.net 2.0_Error Handling_Try Catch - Fatal编程技术网

C# 处理异常与从一开始就防止它们发生-C

C# 处理异常与从一开始就防止它们发生-C,c#,.net-2.0,error-handling,try-catch,C#,.net 2.0,Error Handling,Try Catch,我有一个带有日期时间的asp:BoundColumn?数据在asp:GridView中我将其称为X列。我循环遍历网格中的所有行,并将.Text属性强制转换为列X到DateTime。我需要它来执行一些检查,并根据需要更改单元格背景颜色 我有两个选择: 用try/catch包住演员阵容。。。处理FormatException,以防X列中出现垃圾。。。并且只能使用有效的日期时间值 检查X列以确保其正确无误 以正确的格式如何?之前 大小写,仅当格式为 嗯 我应该采取哪种方法,为什么 多谢各位 p、 s.

我有一个带有日期时间的asp:BoundColumn?数据在asp:GridView中我将其称为X列。我循环遍历网格中的所有行,并将.Text属性强制转换为列X到DateTime。我需要它来执行一些检查,并根据需要更改单元格背景颜色

我有两个选择:

用try/catch包住演员阵容。。。处理FormatException,以防X列中出现垃圾。。。并且只能使用有效的日期时间值

检查X列以确保其正确无误 以正确的格式如何?之前 大小写,仅当格式为 嗯

我应该采取哪种方法,为什么

多谢各位

p、 s.1投票赞成所有解释,TryParse接受答案

Edit2:尽管我使用了TryParse,但我已经检查了已接受的答案,以保持讨论的进行

我的好数据/坏数据比率约为2/1-这意味着大量的坏输入


如果没有其他问题,我将在几天后重新接受答案。

您可以选择第二个选项。DateTime.TryParse可以提供帮助。

您可以选择第二个选项。DateTime.TryParse可能会有所帮助。

我认为这取决于您希望它以错误格式出现的频率。如果很少引发异常,那么在try-catch中包装某些内容实际上根本没有任何影响。但是如果你希望它被提高很多,那么你应该在它上面加一张支票。

我认为这取决于你希望它以错误的格式出现的频率。如果很少引发异常,那么在try-catch中包装某些内容实际上根本没有任何影响。但是如果你希望它被提高很多,那么你应该在它上面加一张支票。

我会选择第二个选项。我从不在常规代码中使用异常,因为在抛出异常时,我可以使用VisualStudio选项BreakintoDebugger运行


这在识别代码中的实际问题时为我节省了很多时间,因为调试器将在实际问题而不是其他地方停止。如果将异常用于无问题的问题,我无法可靠地做到这一点。

我会选择第二个选项。我从不在常规代码中使用异常,因为在抛出异常时,我可以使用VisualStudio选项BreakintoDebugger运行


这在识别代码中的实际问题时为我节省了很多时间,因为调试器将在实际问题而不是其他地方停止。如果将异常用于无问题的问题,我无法可靠地做到这一点。

异常需要大量资源来提出和捕获。当有更优雅的选项可用时,您应该避免让它们被抛出。

异常需要大量资源来引发和捕获。当有更优雅的选项可用时,您应该避免让它们被抛出。

我遵循的规则是:始终尝试手动捕获尽可能多的错误,并使用异常作为最后手段

异常会影响性能。

我遵循的一条规则是:始终尝试手动捕获尽可能多的错误,并将异常作为最后手段


异常会影响性能。

我同意DateTime.TryParse。我在一个容量非常大的网站上工作,我们不允许在UI中捕捉异常,永远!,这有助于我们预防虫子。我们非常努力地确保我们调用的代码不会抛出异常。

我同意DateTime.TryParse。我在一个容量非常大的网站上工作,我们不允许在UI中捕捉异常,永远!,这有助于我们预防虫子。我们非常努力地确保我们调用的代码不会抛出异常。

需要注意的一点是,TryParse的性能并不一定比在解析过程中使用try-Catch更好

这取决于你的失败率。Try-Catch会对性能产生影响,尽管大多数影响是在失败时发生的。 但是,如果您有95%的成功率,甚至更高的成功率,并且性能是一个考虑因素,那么您可能需要考虑在try-catch中包装您的循环,这样您只有在出现失败时才能使用try语句

int i = 0;
List<String> prePopulated;
List<DateTime> toPopulate;

while(i < prepopulated.Length)
{
   Try
   {
      while(i < prepopulated.Length)
      {
         List<DateTime>.add(DateTime.Parse(prePopulated[i]));
         i++;
      }
   }
   Catch(Exception ex)
   {
      //log if necessary
      i++;
   }
}
请记住,只有当您的数据基本上是干净的并且性能是关键时,该解决方案才会更好。
否则,简单的一行TryParse就更好了。

需要注意的是,TryParse的性能并不一定比在解析中使用Try-Catch更好

这取决于你的失败率。Try-Catch会对性能产生影响,尽管大多数影响是在失败时发生的。 但是,如果您有95%的成功率,甚至更高的成功率,并且性能是一个考虑因素,那么您可能需要考虑在try-catch中包装您的循环,这样您只有在出现失败时才能使用try语句

int i = 0;
List<String> prePopulated;
List<DateTime> toPopulate;

while(i < prepopulated.Length)
{
   Try
   {
      while(i < prepopulated.Length)
      {
         List<DateTime>.add(DateTime.Parse(prePopulated[i]));
         i++;
      }
   }
   Catch(Exception ex)
   {
      //log if necessary
      i++;
   }
}
请记住,只有当您的数据基本上是干净的并且性能是关键时,该解决方案才会更好。
否则,单行TryParse越简单越好。

如果您处理过用户输入,那么您将被拒绝
没有例外。无论您是否将它们隐藏在TryParse中,仍然需要了解何时何地需要异常。如果您曾经处理过用户输入,那么您就是在处理异常。无论您是否将它们隐藏在TryParse中,仍然需要了解何时何地需要异常。