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;
}
需要注意的是,它并不总是抛出它。
简单的解决方案:
if (currentClip != null && currentClip.DynamicSpeed != null)
如果currentClip为null,由于短路,它不会检查条件的第二部分。
当它尝试评估时
currentClip.DynamicSpeed
currentClip可能为null,从而导致异常。