C# Null引用异常中的Void MoveNext()
我有一个C# Null引用异常中的Void MoveNext(),c#,C#,我有一个WebAPI,它有一段代码,其中在try块中编写的代码中存在Null引用异常,该代码使用我的记录器记录 但是在记录异常的TargetSite中,我收到的是Void MoveNext(),而不是写入此代码的方法名 同样的原因是什么 public async Task<ResponseStatus> ProcessRCSCNotification(IList<RecurringSubscriptionModelV2> recurringSubscriptionList
WebAPI
,它有一段代码,其中在try块中编写的代码中存在Null引用异常,该代码使用我的记录器记录
但是在记录异常的TargetSite
中,我收到的是Void MoveNext(),而不是写入此代码的方法名
同样的原因是什么
public async Task<ResponseStatus> ProcessRCSCNotification(IList<RecurringSubscriptionModelV2> recurringSubscriptionList, string appCD)
{
foreach (var model in modelList)
{
// Some code
try
{
// Exception occurs here
}
catch (Exception ex)
{
// Logger is logging exception here
}
}
return null;
}
公共异步任务进程RCSCNotification(IList recurringSubscriptionList,字符串appCD)
{
foreach(模型列表中的var模型)
{
//一些代码
尝试
{
//这里发生异常
}
捕获(例外情况除外)
{
//记录器在此记录异常
}
}
返回null;
}
该方法是一种异步/await
方法
这种方法使用MoveNext
方法重写为状态机。这就是为什么堆栈跟踪会将此方法标识为引发该异常的方法
.NET Core 2.0或2.1具有内置或额外的nuget包,该包将修复堆栈跟踪,如下面提到的实际方法,而不是生成的方法
您可以在此处阅读更多信息:
但是,它可能无法修复TargetSite,而且我认为它不会处理.NET Framework。该方法是一种异步/await
方法
这种方法使用MoveNext
方法重写为状态机。这就是为什么堆栈跟踪会将此方法标识为引发该异常的方法
.NET Core 2.0或2.1具有内置或额外的nuget包,该包将修复堆栈跟踪,如下面提到的实际方法,而不是生成的方法
您可以在此处阅读更多信息:
但是,它可能无法修复TargetSite,而且我认为它无法处理.NET Framework。您有一个带有多个等待的异步方法。编译器将整个方法转换为一个状态机,而您的方法实际上只调用这个状态机
这个状态机类有前面提到的MoveNext()
方法,它现在包含了您实际想要做的所有工作
要分析NullReferenceException
,您应该检查异常的StackTrace
属性,而不是TargetSite
,您有一个async
方法,其中包含多个Wait
s。编译器将整个方法转换为一个状态机,而您的方法实际上只调用这个状态机
这个状态机类有前面提到的MoveNext()
方法,它现在包含了您实际想要做的所有工作
要分析您的NullReferenceException
,您应该检查异常的StackTrace
属性,而不是TargetSite
是否确定foreach
已存在(外部)try/catch
?是的,先生,这是肯定的:)你是如何得到你的方法名的?我想你需要发布更多的代码。我能想到的第一个可以在这里调用的void MoveNext()
可能是编译器生成的状态机的MoveNext
,如果你等待try
块中的某个东西。@SeM我不认为OP是在询问NRE本身,但是关于异常的令人困惑的TargetSite
属性。你确定foreach
在try/catch
之外吗?是的,先生,这是肯定的:)你是如何获得方法名的?我想你需要发布更多的代码。我能想到的第一个可以在这里调用的void MoveNext()
可能是编译器生成的状态机的MoveNext
,如果你等待try
块中的某个东西。@SeM我不认为OP是在询问NRE本身,而是询问异常的令人困惑的TargetSite
属性。