相关疑难解决方法(0)

在foreach(项目中的T项目)之前if(items!= null)是多余的吗?

我经常遇到如下代码:

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呢?

c# iteration foreach iterator

87
推荐指数
5
解决办法
4万
查看次数

在foreach循环中检查null

有没有更好的方法来执行以下操作:
我需要在继续循环之前检查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)

可能?

c# foreach null loops

79
推荐指数
6
解决办法
6万
查看次数

使用Linq对象,如何轻松地创建<string,string>的空字典?

要创建空序列,请使用以下内容

var empty = Enumerable.Empty<string> ();
Run Code Online (Sandbox Code Playgroud)

是否有像这样容易创建空字典?

c# linq

31
推荐指数
5
解决办法
1万
查看次数

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
查看次数

如果 linq 中的字段值为空,如何使用 Contains() 函数

我正在开发一个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 字段具有空值时,它会引发错误。

那么,我该如何克服这个问题呢?

c# linq

3
推荐指数
3
解决办法
4740
查看次数

使用LINQ查询语法查询空集合时会发生什么?

我的理解是什么都不会发生.

例如这段代码:

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)

或者查询空集合是否安全?

c# linq collections null

-1
推荐指数
1
解决办法
6594
查看次数