c#将对象报告为null,否则为null

nih*_*hit 2 c# visual-studio-2010 nullreferenceexception sfml

当我在调试模式下运行我的程序时,它会在非空的对象上弹出NullReferenceException - 它显示为Locals视图中定义的.有问题的对象是SFML.Graphics.Sprite,其中只有一个字段为null(myInverseTransform),但是当我检查其他Sprite时,它们也是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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

(在变换:)

        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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

在调用Sprite.Draw时调整this.Transform的问题(根据Locals视图),但在Transform的*运算符中,右变量为null;

Jon*_*eet 5

它没有声称您的变量值为空.(一个对象不能为null - 虽然变量可以有一个空值.这有很大的不同.)它只是说NullReferenceException发生了一个.例如,它可能是SFML库中的错误.您应该查看堆栈跟踪以找出抛出异常的确切位置,然后从那里开始.

  • @MrLister:不。这里有不同的概念——一个*变量*、它的*值*(在这种情况下是一个引用)和一个*对象*(值所指的)。将它们区分开来是非常值得的。“一张写有我地址的纸”与“我的地址”不同,“我的地址”与“我的房子”不同。 (2认同)