【问题标题】:Foreach System.NullReferenceException: Object reference not set to an instance of an objectForeach System.NullReferenceException:对象引用未设置为对象的实例
【发布时间】: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 不是nullTrade 是类Trade 的对象,它有方法RemoveItem(异常正好在这一行抛出:Trade.RemoveItem(item);,不在RemoveItemRemoveItem 不是 null 委托(这段代码大部分时间都有效)

【问题讨论】:

    标签: c# foreach null


    【解决方案1】:

    异常在此代码块的第 3 行

    是否意味着 Trade 为空?

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      相关资源
      最近更新 更多