如何避免在foreach IList

时间:2019-11-20 10:55:10

标签: c# null-check

我有以下代码:

IList<object> testList = null;

... 

if (testList != null) // <- how to get rid of this check?
{
   foreach (var item in testList)
   {
       //Do stuff.
   }
}

是否有办法在if之前避免 foreach?我看到了一些解决方案,但是使用List时是否有解决方案?

4 个答案:

答案 0 :(得分:6)

好吧,您可以尝试使用??运算符:

testList ?? Enumerable.Empty<object>()

我们本身得到testList或空白IEnumerable<object>

IList<object> testList = null;

...

// Or ?? new object[0] - whatever empty collection implementing IEnumerable<object>
foreach (var item in testList ?? Enumerable.Empty<object>())
{
    //Do stuff.
}

答案 1 :(得分:3)

尝试一下

IList<object> items = null;
items?.ForEach(item =>
{
  // ...
});

答案 2 :(得分:0)

我从项目中窃取了以下扩展方法:

public static IEnumerable<T> NotNull<T>(this IEnumerable<T> list)
{
    return list ?? Enumerable.Empty<T>();
}

然后像这样方便地使用

foreach (var item in myList.NotNull())
{

}

答案 3 :(得分:0)

您可以创建如下扩展方法:

public static IList<T> OrEmptyIfNull<T>(this IList<T> source)
 {
       return source ?? Enumerable.Empty<T>().ToList();
 }

然后您可以编写:

 foreach (var item in testList.OrEmptyIfNull())
    {
    }