C# WPF NullReferenceException

C# WPF NullReferenceException,c#,wpf,nullreferenceexception,C#,Wpf,Nullreferenceexception,我有一些WPF代码的问题。这是我以前在另一个项目中使用的代码,运行良好。我有一个类Dots.cs,它是包含我的主Window1.xaml.cs的项目的依赖项 在Dots.cs中,我具有以下功能: public void MakeDraggable(Canvas theCanvas) { _canvas = theCanvas; _canvas.PreviewMouseDown += DPreviewMouseLeftButtonDown;

我有一些WPF代码的问题。这是我以前在另一个项目中使用的代码,运行良好。我有一个类Dots.cs,它是包含我的主Window1.xaml.cs的项目的依赖项

在Dots.cs中,我具有以下功能:

    public void MakeDraggable(Canvas theCanvas)
    {
        _canvas = theCanvas;
        _canvas.PreviewMouseDown += DPreviewMouseLeftButtonDown;
    }
我正在接收InnerException“{System.NullReferenceException:对象引用未设置为对象的实例。 在…\Dot.cs:第261行的GraphicsBook.Dot.MakeDraggable(Canvas画布)中 在…\Window1.xaml.cs:line 47}中的GraphicsBook.Window1..ctor()处

在my Window1.xaml.cs中对MakeDraggable方法的调用是:

    myDots = new Dot[3];
    myDots[0] = new Dot(new Point(-40, 60));
    myDots[1] = new Dot(new Point(40, 60));
    myDots[2] = new Dot(new Point(40, -60));
    for (int i = 0; i < 3; i++)
    {
        myDots[i].MakeDraggable(gp);
        gp.Children.Add(myDots[i]);
    }
myDots[i].MakeDraggable(gp);
Window1.xaml.cs中的第47行是:

    myDots = new Dot[3];
    myDots[0] = new Dot(new Point(-40, 60));
    myDots[1] = new Dot(new Point(40, 60));
    myDots[2] = new Dot(new Point(40, -60));
    for (int i = 0; i < 3; i++)
    {
        myDots[i].MakeDraggable(gp);
        gp.Children.Add(myDots[i]);
    }
myDots[i].MakeDraggable(gp);

在使用方法之前验证方法的参数是有益的。这样,你就会知道你有很好的价值观。在您的情况下,对象gp很有可能为null。您可以使用断点来发现这一点

为了使其更加健壮,可以向makeDragable添加参数检查,如下所示:

public void MakeDraggable(Canvas theCanvas)
{
    if (theCanvas == null)
    {
        throw new ArgumentNullException("theCanvas");
    }

    _canvas = theCanvas;
    _canvas.PreviewMouseDown += DPreviewMouseLeftButtonDown;
}

现在,如果您使用null调用makeDragable,您将得到clear参数null异常,而不是描述性较差的null ReferenceException。

几乎所有的
null ReferenceException
情况都是相同的。请参阅“”以获取一些提示。谢谢,就这样!我没有在XAML中正确设置它。