0
私はいくつかの値を格納するリストを持っています。私はポップアップし、最後のObjectをそのリストからEventArgs-Class-Constructorに返すイベントを定義しました。リストからC#を渡すオブジェクト<T>をパラメータとして
しかし、イベントが発生しますと、私はこのラインでSystem.NullException
を得る:OnIDEventArgs-コンストラクタに最後のID-オブジェクトを渡そうとし
OnID(this, new OnIDEventArgs(ID_List.Last()));
イム。なぜこれはNullExceptionですか?
public delegate void EventHandler(object sender, OnIDEventArgs e);
public event EventHandler OnID;
IDs result = ID_List.FirstOrDefault(x => x.TID == tid_value);
if (result != null)
{ //stuff }
else {
ID_List.Add(new IDs
{
TID = tid_value,
CENTID = centid_value,
IDCount = 1
});
OnID(this, new OnIDEventArgs(ID_List.Last())); //System.NullException comes up here
}
IDのクラス
public class IDs
{
public string TID { get; internal set; }
public string CENTID { get; internal set; }
public int IDCount { get; internal set; }
}
のEventArgsクラス
public class OnIDEventArgs : EventArgs
{
public string LastTID { get; private set; }
public string LastCENTID { get; private set; }
public int IDCount { get; private set; }
public OnIDEventArgs(IDs result)
{
this.LastTID = result.TID;
this.LastCENTID = result.CENTID;
this.IDCount = result.IDCount;
}
}
これはまさにそれだった、ありがとう! –
最後のものは安全です。最初のものでは、理論上は、イベントの基礎となるフィールドを2回読むのを避けるために、別のスレッドがその間に最後のサブスクライバの登録を解除した場合に問題になる可能性があります。var onIDDel = OnID; if(onIDDel!= null){ onIDDel(これは新しいOnIDEventArgs(ID_List.Last())); } '。 –