C# 将对象报告为 null(如果不是)
本文关键字:如果不 null 对象 报告 | 更新日期: 2023-09-27 18:31:48
当我在调试模式下运行我的程序时,它会在非空的对象上弹出一个 NullReferenceException - 它显示为局部变量视图中的定义。有问题的对象是SFML。Graphics.Sprite,它只有一个字段是空的(myInverseTransform),但是当我检查其他精灵时,它们也是空的。
有谁知道什么会导致这种情况,或者我如何找到异常引用的 null 对象是什么?
这是它的图片
相关代码:
代码如下:
(在雪碧中:)
public void Draw(RenderTarget target, RenderStates states)
{
states.Transform *= Transform;
RenderStates.MarshalData marshaledStates = states.Marshal();
if (target is RenderWindow)
{
sfRenderWindow_drawSprite(((RenderWindow)target).CPointer, CPointer, ref marshaledStates);
}
else if (target is RenderTexture)
{
sfRenderTexture_drawSprite(((RenderTexture)target).CPointer, CPointer, ref marshaledStates);
}
}
(在转换中:)
public static Transform operator *(Transform left, Transform right)
{
return new Transform(left).Combine(right);
}
public Transform Combine(Transform transform)
{
sfTransform_combine(CPointer, transform.CPointer);
return this;
}
else if (target is RenderTexture)
{
sfRenderTexture_drawSprite(((RenderTexture)target).CPointer, CPointer, ref marshaledStates);
}
}
调用雪碧绘制这个时的问题。定义了转换(根据局部变量视图),但在转换的 * 运算符中,正确的变量为 null;
它不是声称你的变量值为空。(对象不能为 null - 变量可以具有 null 值。差别很大。只是说发生了NullReferenceException
。例如,这可能是 SFML 库中的错误。您应该查看堆栈跟踪以准确找出引发异常的位置,然后从那里开始。
最有可能的是
,您会发现问题位于 Draw() 方法中,其中某些内容试图访问空变量的成员 - 它甚至可能是方法中的局部变量。
您可以尝试自己编译SFML(它是开源的吗?),并使用该副本来查看到底出了什么问题。