【发布时间】:2013-05-31 23:53:33
【问题描述】:
我得到 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 必须为空,并且必须在其他线程中为空,没有其他选择。对不起,愚蠢的问题。
EDIT2:
如果Trade.RemoveItem被执行,那么offeredItems不为空,因此Trade不能是null。在这两种情况下,offeredItems 都应该包含 1-2 个元素。据我所知(和理解):
Trade 不是null,
Trade 是类Trade 的对象,它有方法RemoveItem(异常正好在这一行抛出:Trade.RemoveItem(item);,不在RemoveItem,
RemoveItem 不是 null 委托(这段代码大部分时间都有效)
【问题讨论】: