C#、While 循环、尝试捕获、记录、继续

Posted

技术标签:

【中文标题】C#、While 循环、尝试捕获、记录、继续【英文标题】:C#, While Loop, Try Catch, Log, Continue 【发布时间】:2016-05-25 12:33:57 【问题描述】:

我正在编写一个实际上将在 ArcGIS 中作为任务运行的移动应用程序,但我的问题基本上是 C# 错误处理。我正在使用while 循环遍历记录并使用StreamWriter 记录读取数据失败的尝试。我已将每个字段分解为单独的trycatch,以便我可以写入导致日志文件失败的记录和字段。下面的例子。

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 循环、尝试捕获、记录、继续的主要内容,如果未能解决你的问题,请参考以下文章

使用 c# 将数据记录到 cassandra

使用while循环在表中插入多条记录[关闭]

如何在更新时捕获失败的记录并继续 Oracle 中的其余记录?

C#传智:分支Switch与循环While(第四天)

Laravel:是不是可以在捕获异常时记录堆栈跟踪并继续执行?

C#让程序等待按钮被按下