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;

C# 将对象报告为 null(如果不是)

它不是声称你的变量值为空。(对象不能为 null - 变量可以具有 null 值。差别很大。只是说发生了NullReferenceException。例如,这可能是 SFML 库中的错误。您应该查看堆栈跟踪以准确找出引发异常的位置,然后从那里开始。

最有可能的是

,您会发现问题位于 Draw() 方法中,其中某些内容试图访问空变量的成员 - 它甚至可能是方法中的局部变量。

您可以尝试自己编译SFML(它是开源的吗?),并使用该副本来查看到底出了什么问题。