Null检查引发NullReferenceException

本文关键字:NullReferenceException 检查 Null | 更新日期: 2023-09-27 18:00:40

我有一个简单的行

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

需要注意的是,它并不总是抛出它。

Null检查引发NullReferenceException

简单的解决方案:

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

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

当它尝试评估时

currentClip.DynamicSpeed

currentClip可能为null,从而导致异常。