这是我用作参数的方法的实现:
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));
}
正如你所看到的,我使用三重检查来确保程序不会在这里粉碎。
有没有更好的方法来解决这个问题?
谢谢!
答案 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));
}