当我尝试举办活动时获得例外

时间:2014-05-06 11:20:48

标签: c# events enums delegates

我得到了一个枚举:

public enum sprog{
   dansk,
   svensk,
   norsk
}

在一个方法中,我会引发一个事件并使用枚举来传递信息:

public delegate void BrugerSprogChanged(Object sender, Sprog sprog);
class clazz
{
    public event BrugerSprogChanged brugerSprogChanced;
    public clazz(){}

    private void comboBoxDokumentSprog_SelectedIndexChanged(object sender, EventArgs e)
    {
        Sprog sprog = FindSprog((string)((ComboBox)sender).SelectedItem);
        dokumentSprogChanged(this, sprog); // <- here we have the problem
    }
}

当代码引发事件时,调用dokumentSprogChanged(this,sprg)时会出现异常:

*&#34; NullReferenceException未被用户代码

处理

对象引用未设置为对象的实例&#34;

&#34;这&#34;和&#34; sprog&#34;不是空的。

有什么建议吗?

简单的方法是删除它并使用整数/字符串代替,但最后我会得到一些丑陋的代码。

2 个答案:

答案 0 :(得分:3)

通常要调用一个事件,你必须检查它的处理程序是否为空:

var handler = dokumentSprogChanged; // take a local reference

if (handler != null)
{
    dokumentSprogChanged(this, sprog);
}

这样你可以安全地提高它。

修改

你需要注册这样的事件:

public event BrugerSprogChanged brugerSprogChanced;

....
brugerSprogChanced += class_brugerSprogChanced;
....

void class_brugerSprogChanced(object sender, EventArgs e)
{
    // handle there
}

答案 1 :(得分:1)

试试这个:

class clazz
{
    public event BrugerSprogChanged brugerSprogChanced;
    public clazz(){}

    private void comboBoxDokumentSprog_SelectedIndexChanged(object sender, EventArgs e)
    {
        Sprog sprog = FindSprog((string)((ComboBox)sender).SelectedItem);
        if (dokumentSprogChanged != null)
        {
            dokumentSprogChanged(this, sprog); // <- here we have the problem
        }
    }
}