NotifyCollectionChangedEventArgs检查它包含的内容

时间:2013-09-08 02:20:35

标签: c#

这是我用作参数的方法的实现:

System.Collections.Specialized.NotifyCollectionChangedEventHandler

- >

void _students_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    string xxx = '';

    if (e.NewItems != null && e.NewItems[0] != null && e.NewItems[0] is Student)
    {
        xxx = (e.NewItems[0] as Student).Name;
    }

    lstLog.Items.Add(string.Format("{0} Name:", xxx));

}

正如你所看到的,我使用三重检查来确保程序不会在这里粉碎。

有没有更好的方法来解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:2)

我不确定是否确实检查e.NewItems.Count > 0是否真的有必要,因为如果没有添加任何内容,它通常为空。而e.NewItems[0] != null && e.NewItems[0] is Student代替e.NewItems[0] is Student,因为null is Student为假,所以var student = (e.NewItems ?? new List<Student>()).OfType<Student>().FirstOrDefault(); if (student != null) lstLog.Items.Add(string.Format("Name: {0}", student.Name)); 可以e.NewItems。即使名称/ xxx变量为空,也存在记录某些内容的问题。这可能有点滥用,但你可以这样做:

foreach (Student student in e.NewItems ?? new List<Student>())
    lstLog.Items.Add(string.Format("Name: {0}", student.Name));

如果{{1}}可能包含多个对象,您甚至可能会执行以下操作:

{{1}}

答案 1 :(得分:1)

我会做这样的事情

void _students_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    string name = string.Empty;

     if (e.NewItems != null && e.NewItems.Count > 0)
    {
        var student = e.NewItems[0] as Student;
        if (student != null) name = student.Name;
    }

    lstLog.Items.Add(string.Format("{0} Name:", name)); 
}