我有一个ASP:绑定列有日期时间? 数据在ASP(我称之为列X):GridView控件。 我遍历网格中的所有行,并投了。文本属性为列X为DateTime(我需要这个做一些检查,如果需要更改单元格背景颜色)。
我有2种选择:
包装在try / catch语句投...处理出现FormatException(如果列X获取与它的一些垃圾渲染)......只有用有效的DateTime值工作。
检查列X,以确保它(如何?)外壳之前是正确的格式,如果格式是确定只投。
我应该采取哪种方法,为什么?
谢谢。
PS 1赞成票的所有解释,接受答案的TryParse
EDIT2:即使我使用的TryParse,我已经选中接受的答案,以使讨论会。
我的“好数据” /“坏数据”的比例大约为2/1 -这意味着大量的有害输入的
我会再接受几天的答案,如果不出意外出现。
你可以做的第二个选项。 DateTime.TryParse可以提供帮助。
我认为这取决于你希望多久它是在错误的格式位。 在一个try-catch包裹的东西并没有真正产生任何影响可言,如果将例外很少提出。 但是,如果你指望它提高,很多,那么你应该检查可能添加到它。
我会去的第二个选项。 我从来没有使用常规代码例外,因为这样我可以在Visual Studio选项运行“时抛出异常闯入调试器”。
该识别码的实际问题时,为我节省了很多时间,因为调试器会在实际的问题阻止别的地方吧。 如果异常用于非问题的问题,我不能这样做可靠。
例外情况采取了大量的资源,以提高和追赶。 你应该避免让当有可用的更优雅的选择他们被抛出。
我遵循一个规则: 始终尝试手动捕捉尽可能多的错误,就可以了,使用异常作为最后的手段。
例外会对性能产生影响。
有一点要注意的是,“的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”比较好。
我同意DateTime.TryParse。 我在一个非常高容量的网站工作,我们不允许捕捉异常的UI,永远!这有助于我们避免错误。 我们确实努力,以确保我们调用不能抛出异常的代码。
文章来源: Handling exceptions vs. Preventing them from occuring in the first place - C#