【问题标题】:Null check throws NullReferenceException空检查抛出 NullReferenceException
【发布时间】:2014-06-15 17:01:33
【问题描述】:

我有一条简单的线

if (currentClip.DynamicSpeed != null)

currentClip 是我自己的数据类型,而 DynamicSpeed 是一个自定义类型,其中包含少量字符串和浮点变量。

在这种情况下,currentClip 是对象并且表示 DynamicSpeed 为空。但是,我仍然从这一行得到一个 NullReferenceException。此外,堆栈跟踪似乎指向正确的行以及异常的来源(一些解决方案表明它们可能是错误的,并且还有其他解决方案)。

什么可能导致这种情况。 != 运算符也没有重载。

[编辑] 这里是相关的类。

public class Clip2D
{
    public string Name;

    [ContentSerializer(Optional = true)]
    public bool FlipX;
    [ContentSerializer(Optional = true)]
    public bool FlipY;

    [ContentSerializer(Optional = true)]
    public string NextClip;

    [ContentSerializer(Optional = true)]
    public string PreviousClip;

    [ContentSerializer(Optional = true)]
    public DynamicSpeed DynamicSpeed;
}

public class DynamicSpeed
{
    public string AffectingVariable;

    public float MinSpeed;
    public float MaxSpeed;
    public float MinValue;
    public float MaxValue;
}

应该注意,它并不总是扔掉它。

【问题讨论】:

  • 您是否检查过以确保currentClip 也不为空?
  • 试试if (currentClip != null && currentClip.DynamicSpeed != null)
  • 调试器显示 currentClip 不为空,它填充了其他字段,DynamicSpeed 是唯一的空字段。
  • DynamicSpeed 也没有吸气剂。

标签: c# nullreferenceexception


【解决方案1】:

简单的解决方案:

if (currentClip != null && currentClip.DynamicSpeed != null)

如果 currentClip 为空,由于短路,它不会检查条件的第二部分。

【讨论】:

  • 你能贴出 currentclip 的课程布局吗?
  • 发布到原帖。
【解决方案2】:

当它试图评估时

currentClip.DynamicSpeed

currentClip 可能为 null 导致异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 2014-11-25
    • 2011-10-27
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2020-11-17
    • 2016-03-21
    相关资源
    最近更新 更多