"单击" - 委托实例方法不能为null' {'

时间:2016-03-01 11:44:51

标签: c# delegates

我知道这个话题已经有很多问题了。但我似乎无法理解这整个代表的内容。我有点想要它继续工作并继续前进。每次当我看到代表时,我都认为,必须有一种方法可以使这更容易理解和做,但我似乎无法找到它。

我有一个FlowLayoutPanel,它将填充一堆Panel。每个面板都需要有一个OnClick(或Click?)方法附加到它。

所以我继续编写(在我个人小组课程的创建者内部):

IntDrawForm form = FindForm() as IntDrawForm;
Click += form.PointPanelClick;

当我尝试创建一个我的面板时,我最终得到了错误消息Delegate to an instance method cannot have null 'this'

1 个答案:

答案 0 :(得分:2)

是的,如果FindForm()返回null,或者不是IntDrawForm的实例,则会发生这种情况。这里的代表没有特别的具体内容 - 如果您尝试将此作为第二行,您将获得类似的结果:

form.CallSomeMethod();

(在这种情况下,它将是NullReferenceException。)

鉴于当formnull时第二行基本上失败了,你不应该在这里使用as - 而是使用强制转换。这样,如果您没有IntDrawForm第一个行就会失败,并且您将获得更多信息性异常。

IntDrawForm form = (IntDrawForm) FindForm();

现在我们无法告诉为什么 FindForm()已归还null或非IntDrawForm,但这是另一回事