繁体   English   中英

C#从列表传递对象 <T> 作为参数

[英]C# passing Object from List<T> as parameter

我有一个列表,我在其中存储一些值。 我定义了一个事件,该事件应弹出并将该列表中的最后一个对象返回其EventArgs-Class-Constructor。

但是当事件被触发时,我在这行得到一个System.NullException

OnID(this, new OnIDEventArgs(ID_List.Last()));

我试图将最后一个ID对象传递给OnIDEventArgs-Constructor。 为什么这是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;

        }
    }

这可能是由于没有任何内容订阅OnID事件,因此OnID委托为null,因此对其调用Invoke将引发NRE。

为了避免这种情况,只需先检查OnID是否为null:

if (OnID != null) {
    OnID(this, new OnIDEventArgs(ID_List.Last()))
}

要么:

OnID?.Invoke(this, new OnIDEventArgs(ID_List.Last())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM