小编IDa*_*der的帖子

Null合并运算符IList,Array,Enumerable.Empty in foreach

这个问题中,我发现了以下内容:

int[] array = null;

foreach (int i in array ?? Enumerable.Empty<int>())  
{  
    System.Console.WriteLine(string.Format("{0}", i));  
}  
Run Code Online (Sandbox Code Playgroud)

int[] returnArray = Do.Something() ?? new int[] {};
Run Code Online (Sandbox Code Playgroud)

... ?? new int[0]
Run Code Online (Sandbox Code Playgroud)

在一个NotifyCollectionChangedEventHandler我想申请Enumerable.Empty如此:

foreach (DrawingPoint drawingPoint in e.OldItems ?? Enumerable.Empty<DrawingPoint>())
    this.RemovePointMarker(drawingPoint);
Run Code Online (Sandbox Code Playgroud)

注意: OldItems 属于该类型 IList

它给了我:

接线员'??' 不能应用于'System.Collections.IList'类型的操作数System.Collections.Generic.IEnumerable<DrawingPoint>

然而

foreach (DrawingPoint drawingPoint in e.OldItems ?? new int[0])
Run Code Online (Sandbox Code Playgroud)

foreach (DrawingPoint drawingPoint in e.OldItems ?? new int[] {})
Run Code Online (Sandbox Code Playgroud)

工作得很好.

这是为什么?
为什么IList ?? T[]工作但IList …

.net c# collections null-coalescing-operator

22
推荐指数
1
解决办法
1095
查看次数

标签 统计

.net ×1

c# ×1

collections ×1

null-coalescing-operator ×1