gpt4 book ai didi

c# - System.NullReferenceException 未在第一个 Try/Catch block 中捕获

转载 作者:行者123 更新时间:2023-12-04 12:52:50 24 4
gpt4 key购买 nike

我有一个以“static int Main(string[] args)”开头的 C# 控制台应用程序,创建了一个“EventRecievedProcessor”类的实例,然后在该实例上调用一个方法:

static int Main(string[] args)
{
try
{
EventRecievedProcessor proc = new EventRecievedProcessor

if (!proc.Processs())
{
Console.Write(Type + " processing failed. Please check logs for more information.");
Log.Error("Failed to process s");
return (int)RETURNCODES.INTERNALAPPERROR;
}
}
catch (Exception ex)
{
// This is where the System.NullReferenceException from GetLatestEventInfo is currently being caught

Console.WriteLine("Exception message: " + ex.Message);
Console.WriteLine("Exception stack trace: " + ex.StackTrace);

Log.Fatal("An exception has been thrown. Message: " + ex.Message, ex);

return (int)RETURNCODES.INTERNALAPPERROR;
}
}

'EventRecievedProcessor' 的实例获取一组记录并对其执行 foreach。它为集合中的每条记录调用“事件”类上的静态方法 (GetLatestEventInfo):
public class EventRecievedProcessor
{

public bool Processs()
{
List<Event> events = DAL.GetEvents;

foreach (Event e in events)
{
try
{
EventInfo lastEvent = Eventhistory.GetLatestEventInfo(e);
}
catch (Exception ex)
{
// Log exception and continue processing in foreach loop

// This is where I want to catch the NullReferenceException from GetLatestEventInfo

Log.DebugFormat("Error with eventid " + e.EventID);
Log.Error(ex);
}
}

return true;
}
}

调用以下方法时,会抛出 System.NullReferenceException:
public class EventHistory
{

public static EventInfo GetLatestEventInfo(int customerCode, string premiscode)
{

EventInfo info = new EventInfo();

// Do some work here...
// This is where the NullReferenceException is being generated.

return info;

}
}

当此处抛出 NullReferenceException 时,我希望 foreach 循环中的 catch 块捕获它,记录它,然后将控制权返回给 foreach 循环以继续处理。相反,异常是在顶级“Main”方法中捕获的,这意味着应用程序中止并且不会处理剩余的记录。

我不知道异常如何/为什么绕过第一个 catch 块。关于我在这里做错了什么的任何想法?

添加堆栈跟踪:

System.NullReferenceException:未将对象引用设置为对象的实例。
在 EventProcessor.EventHistory.GetLatestEventInfo(Event e) 在 C:\Dev\release6.01.100\Events\EventProcessor\EventProcessor\EventHistory.cs:line 65
在 EventProcessor.Processors.EventProcessor.Process() 在 C:\Dev\release6.01.100\Events\EventProcessor\EventProcessor\Processors\EventProcessor.cs:line 32
在 C:\Dev\release6.01.100\Events\EventProcessor\EventProcessor\Program.cs:line 132 中的 EventProcessor.Program.Main(String[] args)

对不起,如果我咀嚼了一些名字。这是工作代码,因此我尝试对其进行一些更改以避免任何隐私冲突。

最佳答案

它不会绕过任何东西。仔细查看您的堆栈跟踪。使用 Console.WriteLine(ex.ToString()); .您会看到异常并未从您认为的位置抛出。

关于c# - System.NullReferenceException 未在第一个 Try/Catch block 中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4271848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com