处理异常与从摆在首位存在的阻止他们 - C#(Handling exceptions vs. Pr

2019-09-30 01:38发布

我有一个ASP:绑定列有日期时间? 数据在ASP(我称之为列X):GridView控件。 我遍历网格中的所有行,并投了。文本属性为列X为DateTime(我需要这个做一些检查,如果需要更改单元格背景颜色)。

我有2种选择:

  1. 包装在try / catch语句投...处理出现FormatException(如果列X获取与它的一些垃圾渲染)......只有用有效的DateTime值工作。

  2. 检查列X,以确保它(如何?)外壳之前是正确的格式,如果格式是确定只投。

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

谢谢。

PS 1赞成票的所有解释,接受答案的TryParse

EDIT2:即使我使用的TryParse,我已经选中接受的答案,以使讨论会。

我的“好数据” /“坏数据”的比例大约为2/1 -这意味着大量的有害输入的

我会再接受几天的答案,如果不出意外出现。

Answer 1:

你可以做的第二个选项。 DateTime.TryParse可以提供帮助。



Answer 2:

我认为这取决于你希望多久它是在错误的格式位。 在一个try-catch包裹的东西并没有真正产生任何影响可言,如果将例外很少提出。 但是,如果你指望它提高,很多,那么你应该检查可能添加到它。



Answer 3:

我会去的第二个选项。 我从来没有使用常规代码例外,因为这样我可以在Visual Studio选项运行“时抛出异常闯入调试器”。

该识别码的实际问题时,为我节省了很多时间,因为调试器会在实际的问题阻止别的地方吧。 如果异常用于非问题的问题,我不能这样做可靠。



Answer 4:

例外情况采取了大量的资源,以提高和追赶。 你应该避免让当有可用的更优雅的选择他们被抛出。



Answer 5:

我遵循一个规则: 始终尝试手动捕捉尽可能多的错误,就可以了,使用异常作为最后的手段。

例外会对性能产生影响。



Answer 6:

有一点要注意的是,“的TryParse”不一定会比拥有在你“解析”一个尝试捕捉更好的性能。

这取决于你的失败率。 尝试捕获的会影响性能,虽然大部分的影响是,当你失败。 但是,如果你有95%的成功率,甚至更高,并且性能是一个考虑因素,那么你可能要考虑在一个try-catch包裹你的循环,让你只打你的“试一试”的语句有一个时失败。

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”比较好。



Answer 7:

我同意DateTime.TryParse。 我在一个非常高容量的网站工作,我们不允许捕捉异常的UI,永远!这有助于我们避免错误。 我们确实努力,以确保我们调用不能抛出异常的代码。



文章来源: Handling exceptions vs. Preventing them from occuring in the first place - C#