Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Null引用异常中的Void MoveNext()_C# - Fatal编程技术网

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
属性。