0

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

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));

}

如您所见,我使用三重检查来确保程序不会在这里崩溃。

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

谢谢!

4

2 回答 2

2

我不确定检查是否e.NewItems.Count > 0真的有必要,因为如果没有添加任何内容,它通常为空。而不是e.NewItems[0] != null && e.NewItems[0] is Student,您可以这样做,e.NewItems[0] is Student因为null is Student它是错误的。即使 name/xxx 变量为空,也存在记录某些内容的问题。这可能有点滥用,但你可以这样做:

var student = (e.NewItems ?? new List<Student>()).OfType<Student>().FirstOrDefault();
if (student != null)
    lstLog.Items.Add(string.Format("Name: {0}", student.Name));

如果可能e.NewItems包含多个对象,您甚至可以执行以下操作:

foreach (Student student in e.NewItems ?? new List<Student>())
    lstLog.Items.Add(string.Format("Name: {0}", student.Name));
于 2013-09-08T04:04:50.943 回答
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)); 
}
于 2013-09-08T02:39:55.013 回答