首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF NullReferenceException

WPF NullReferenceException
EN

Stack Overflow用户
提问于 2014-11-14 16:45:38
回答 1查看 1K关注 0票数 0

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

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

代码语言:javascript
复制
    public void MakeDraggable(Canvas theCanvas)
    {
        _canvas = theCanvas;
        _canvas.PreviewMouseDown += DPreviewMouseLeftButtonDown;
    }

我正在接收未设置为对象实例的InnerException '{System.NullReferenceException:对象引用。GraphicsBook.Dot.MakeDraggable(画布theCanvas) in ...\Dot.cs:line 261 at GraphicsBook.Window1..ctor() in...\Window1.xaml.cs:line 47}

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

代码语言:javascript
复制
    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]);
    }

为了清楚起见,Dot.cs中的第261行是:

代码语言:javascript
复制
_canvas.PreviewMouseDown += DPreviewMouseLeftButtonDown;

Window1.xaml.cs中的第47行是:

代码语言:javascript
复制
myDots[i].MakeDraggable(gp);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 16:50:40

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

为了使它更健壮,您可以向MakeDraggable添加一个参数检查,如下所示:

代码语言:javascript
复制
public void MakeDraggable(Canvas theCanvas)
{
    if (theCanvas == null)
    {
        throw new ArgumentNullException("theCanvas");
    }

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

现在,如果您使用null调用MakeDraggable,您将得到清晰的参数-- Null异常,而不是描述性较低的NullReferenceException。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26934883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档