use*_*082 5 c# list concatenation
当填写代码行下面的两个列表时,我的代码工作正常.但是错误"值不能为空".当LstNewItems设置为null时发生.为什么以及如何解决这个问题,或者我必须事先检查每个列表是否为空并采取相应措施?
this.radGridViewFiles.BeginInvoke((MethodInvoker)(
() => this.radGridViewFiles.DataSource = MyGlobals.ListOfItemsToControl
.Concat(MyGlobals.lstNewItems)
.ToList()
));
Run Code Online (Sandbox Code Playgroud)
Rud*_*dis 12
您可以使用
MyGlobals.lstNewItems ?? Enumerable.Empty<someObjectType>()
Run Code Online (Sandbox Code Playgroud)
当您有任意数量的可能为空的集合要连接时:
IEnumerable<T> Concat<T>(params IEnumerable<T>[] nullableCollections)
{
return nullableCollections.Where(nc => nc != null).SelectMany(nc => nc);
}
Run Code Online (Sandbox Code Playgroud)
稍后您可以致电:
IEnumerable<T> allElements = Concat(myElements, yourElements, theirElements);
Run Code Online (Sandbox Code Playgroud)
不用担心其中任何一个是否为空。
我所做的是创建一个扩展方法,如果枚举为空,它可以创建一个空列表:
public static IEnumerable<T> NeverNull<T>(this IEnumerable<T> value)
{
return value ?? Enumerable.Empty<T>();
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
this.radGridViewFiles.BeginInvoke((MethodInvoker)(
() => this.radGridViewFiles.DataSource = MyGlobals.ListOfItemsToControl
.Concat(MyGlobals.lstNewItems.NeverNull())
.ToList()
));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7265 次 |
| 最近记录: |