C#、While 循环、尝试捕获、记录、继续
Posted
技术标签:
【中文标题】C#、While 循环、尝试捕获、记录、继续【英文标题】:C#, While Loop, Try Catch, Log, Continue 【发布时间】:2016-05-25 12:33:57 【问题描述】:我正在编写一个实际上将在 ArcGIS 中作为任务运行的移动应用程序,但我的问题基本上是 C# 错误处理。我正在使用while
循环遍历记录并使用StreamWriter
记录读取数据失败的尝试。我已将每个字段分解为单独的try
catch
,以便我可以写入导致日志文件失败的记录和字段。下面的例子。
try
TrafficLanesCount = Convert.ToByte(ModifiedFDR.GetValue(ModifiedFDR.GetOrdinal("TRAFICLN")));
catch
sw.WriteLine(DOTNumber + " " + "TrafficLanesCount");
我在 while 循环结束时保存,但如果有任何失败,我想记录它,跳过该记录,然后继续下一条记录。有谁知道这样做的方法吗?
【问题讨论】:
最后保存是什么意思?关闭信息流? 我们可能可以使用更多的 while 循环来提供想法 你能提供整个代码片段吗? 如果它在while
循环中,并且在遇到错误后要继续,那么我认为您只需在catch
中使用continue;
。但如果不查看更多代码并了解更多细节,真的很难说。
将所有这些值都保存到局部变量后,我将调用一个服务来保存在这个循环的底部。
【参考方案1】:
代替
sw.WriteLine(DOTNumber + " " + "TrafficLanesCount");
你可以使用
File.AppendAllText("path/to/log.txt", DOTNumber + " " + "TrafficLanesCount" + nvironment.NewLine);
实时写行。这样,您的日志将保留在每个捕获中..
我还想指出,有非常成熟的日志框架。例如NLog 或Log4net 列出两个比较流行的。
【讨论】:
【参考方案2】:使用提供的代码,我会使用这样的东西:
var errorList = new List<Exception>();
foreach(var record in records)
try
try
TrafficLanesCount = Convert.ToByte(ModifiedFDR.GetValue(ModifiedFDR.GetOrdinal("TRAFICLN")));
catch
throw new Exception(new string(DOTNumber + " " + "TrafficLanesCount"));
catch (Exception exp)
errorList.Add(exp);
然后,您可以遍历列表中的异常并在此时处理它们。
【讨论】:
捕获自己的异常没有什么意义。内部的 try..catch 是多余的。让任何异常冒出来。以上是关于C#、While 循环、尝试捕获、记录、继续的主要内容,如果未能解决你的问题,请参考以下文章
如何在更新时捕获失败的记录并继续 Oracle 中的其余记录?