1

我得到 System.NullReferenceException: Object reference not set to an instance of an object in this:

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

与所有此类问题不同的是,该代码块的第 3 行中出现了异常。这是否意味着 Trade 为空?这会很奇怪,因为我之前做了一些检查:

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

唯一的原因是如果 Trade 在 5-10 次简单操作中在另一个线程中被清空(这将是非常出乎意料的行为),这真的很奇怪。

编辑:

问题是我无法通过完全相同的步骤重现这一点。我猜 Trade 必须为空,并且必须在其他线程中为空,没有其他选择。对不起愚蠢的问题。

编辑2:

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

Tradeis not nullTrade是 class 的对象Trade,它有方法RemoveItem(异常恰好在这一行抛出:Trade.RemoveItem(item);, not in RemoveItemRemoveItemis not nulldelegate (这段代码大部分时间都有效)

4

1 回答 1

3

异常在此代码块的第 3 行

这是否意味着 Trade 为空?

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

  1. Tradenull
  2. Trade是一个属性,它的 getter 抛出一个NullReferenceException.
  3. RemoveItemnull代表。
  4. RemoveItem抛出一个NullReferenceException.

为什么不在调试器中单步调试代码并找出答案?另外,请参阅对您的问题的评论。

于 2013-06-01T00:18:31.683 回答