Foreach System.NullReferenceException:未将对象引用设置为对象的实例

时间:2013-05-31 23:53:33

标签: c# foreach null

我得到System.NullReferenceException:对象引用未设置为此对象的实例:

var offeredItems = new List<ulong>(Trade.steamMyOfferedItems);
foreach (var item in offeredItems) {
    Trade.RemoveItem(item);
}

与所有此类问题的不同之处在于异常位于此代码块的第3行。这是否意味着贸易是空的?这很奇怪,因为我之前做了几次操作检查:

if (Trade != null && Trade.OtherSID == OtherSID) {
    OnTradeMessage(message);
    return;
}

唯一的原因是,如果Trade在5-10个简单操作的时间内被另一个线程(并且这将是非常不可思议的行为)取消,这将非常奇怪。

编辑:

问题是我无法重现这一步做同样的步骤。我猜贸易必须为空,并且必须在其他线程中为空,没有其他选择。抱歉愚蠢的问题。

EDIT2:

如果Trade.RemoveItem被执行,则offeredItems不为空,因此Trade不能为null。在这两种情况下,offeredItems应包含1-2个元素。据我所知(并理解):

Trade不是nullTrade是类Trade的对象,其方法为RemoveItem(该行正好抛出异常:Trade.RemoveItem(item);,而不是RemoveItemRemoveItem不是null委托(此代码大部分时间都有效)

1 个答案:

答案 0 :(得分:3)

  

异常在此代码块的第3行

     

这是否意味着贸易是空的?

可能意味着。这听起来像是以下可能性之一:

  1. Tradenull
  2. Trade是一个getter抛出NullReferenceException
  3. 的属性
  4. RemoveItemnull代表。
  5. RemoveItem会抛出NullReferenceException
  6. 为什么不在调试器中单步执行代码并查找?另外,请查看您问题的评论。