我得到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
不是null
,
Trade
是类Trade
的对象,其方法为RemoveItem
(该行正好抛出异常:Trade.RemoveItem(item);
,而不是RemoveItem
,
RemoveItem
不是null
委托(此代码大部分时间都有效)
答案 0 :(得分:3)
异常在此代码块的第3行
这是否意味着贸易是空的?
它可能意味着。这听起来像是以下可能性之一:
Trade
是null
。Trade
是一个getter抛出NullReferenceException
。RemoveItem
是null
代表。RemoveItem
会抛出NullReferenceException
。为什么不在调试器中单步执行代码并查找?另外,请查看您问题的评论。