我得到了一个枚举:
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;不是空的。
有什么建议吗?
简单的方法是删除它并使用整数/字符串代替,但最后我会得到一些丑陋的代码。
答案 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
}
}
}