当填写代码行下面的两个列表时,我的代码工作正常。 但是错误“值不能为空”。当LstNewItems设置为null时发生。 为什么以及如何解决这个问题,或者我必须事先检查每个列表是否为空并采取相应措施?
this.radGridViewFiles.BeginInvoke((MethodInvoker)(
() => this.radGridViewFiles.DataSource = MyGlobals.ListOfItemsToControl
.Concat(MyGlobals.lstNewItems)
.ToList()
));
答案 0 :(得分:10)
您可以使用
MyGlobals.lstNewItems ?? Enumerable.Empty<someObjectType>()
答案 1 :(得分:5)
如果可能的话,永远不要让自己处于列表为null
的位置,这样您就不需要检查null
并以不同方式处理该案例。有一个空列表而不是null
几乎总是可取的。
答案 2 :(得分:4)
我所做的是创建一个扩展方法,如果枚举为null,则可以创建一个空列表:
public static IEnumerable<T> NeverNull<T>(this IEnumerable<T> value)
{
return value ?? Enumerable.Empty<T>();
}
然后你可以这样做:
this.radGridViewFiles.BeginInvoke((MethodInvoker)(
() => this.radGridViewFiles.DataSource = MyGlobals.ListOfItemsToControl
.Concat(MyGlobals.lstNewItems.NeverNull())
.ToList()
));
答案 3 :(得分:2)
试试这个
( MyGlobals.ListOfItemsToControl ?? new List<Type>()).Concat(MyGlobals.lstNewItems ?? new List<Type>()) .ToList()
答案 4 :(得分:1)
在连接之前检查null。等,
if(MyGlobals.lstNewItems != null)
{
MyGlobals.ListOfItemsToControl.AddRange(MyGlobals.lstNewItems);
}
答案 5 :(得分:1)
当您有任意数量的可能为空的集合要串联时:
IEnumerable<T> Concat<T>(params IEnumerable<T>[] nullableCollections)
{
return nullableCollections.Where(nc => nc != null).SelectMany(nc => nc);
}
,稍后您可以致电:
IEnumerable<T> allElements = Concat(myElements, yourElements, theirElements);
不用担心它们是否为空。