空检查抛出NullReferenceException

时间:2014-04-29 16:18:24

标签: c# nullreferenceexception

我有一个简单的行

if (currentClip.DynamicSpeed != null)

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

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

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

[edit]以下是相关课程。

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;
}

应该注意的是它并不总是抛出它。

2 个答案:

答案 0 :(得分:3)

简单的解决方案:

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

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

答案 1 :(得分:0)

当它试图评估时

currentClip.DynamicSpeed

currentClip可能为null,导致异常。