在这个问题中,我发现了以下内容:
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 …