我经常遇到如下代码:
if ( items != null)
{
foreach(T item in items)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,if条件确保foreach块仅在items不为null时才会执行.我想知道这种if情况是否真的需要,或者foreach是否会处理这种情况items == null.
我的意思是,我可以简单地写一下
foreach(T item in items)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
不用担心是否items为空?是if条件多余的?或者这取决于该类型的items或可能的T呢?
有没有更好的方法来执行以下操作:
我需要在继续循环之前检查file.Headers上的null
if (file.Headers != null)
{
foreach (var h in file.Headers)
{
//set lots of properties & some other stuff
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,由于我的代码中发生缩进的程度,因此将foreach写入if中看起来有点难看.
是值得评价的东西
foreach(var h in (file.Headers != null))
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
可能?
要创建空序列,请使用以下内容
var empty = Enumerable.Empty<string> ();
Run Code Online (Sandbox Code Playgroud)
是否有像这样容易创建空字典?
在这个问题中,我发现了以下内容:
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 …
我正在开发一个Linq用于获取数据的项目。现在我有一个场景,我必须检查字段值是否包含我使用的Contains()函数的给定字符串。
一切正常,但是当任何领域出现时,null就会产生问题。
personData = personData.Where(x => x.FirstName.ToLower().Contains(q.ToLower()) || x.LastName.ToLower().Contains(q.ToLower())).Select(x => x).ToList();
Run Code Online (Sandbox Code Playgroud)
在这里,当 FirstName 或 LastName 字段具有空值时,它会引发错误。
那么,我该如何克服这个问题呢?
我的理解是什么都不会发生.
例如这段代码:
foreach (var some in (from u in possiblyNullCollection ) )
{
//
}
Run Code Online (Sandbox Code Playgroud)
应该守卫如下:
if ( possiblyNullCollection != null )
{
foreach (var some in (from u in possiblyNullCollection ) )
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
或者查询空集合是否安全?