我想知道在使用ForEach循环之前,检查列表对象如何不为null。下面是我正在尝试的示例代码:
List<string> strList ;
strList.ForEach (x => Console.WriteLine(x)) ;
我在lambda表达方面寻找解决方案,不想使用if
语句。
答案 0 :(得分:1)
您可以为List<>
编写扩展方法,该方法将检查null,否则将在其ForEach
参数上调用this
。称之为ForEachWithNullCheck或类似的东西,你会没事的。
public static void ForEachWithNullCheck<T>(this List<T> list, Action<T> action)
{
if (list == null)
{
// silently do nothing...
}
else
{
list.ForEach(action);
}
}
用法示例:
List<string> strList;
strList.ForEachWithNullCheck(x => Console.WriteLine(x));
答案 1 :(得分:0)
您可能已经有了更好的解决方案。只想表明我是如何做到的。
List<string> strList ;
strList.ForEach (x => string.IsNullOrEmpty(x)?Console.WriteLine("Null detected"): Console.WriteLine(x)) ;
在我的场景中,我在foreach中总结了一个值,如下所示。
double total = 0;
List<Payment> payments;
payments.ForEach(s => total += (s==null)?0:s.PaymentValue);
答案 2 :(得分:-1)
最正确/惯用的解决方案(如果您不能avoid having a null
collection to begin with)是使用if
:
if(list != null)
foreach(var str in list)
Console.WriteLine(str);
将if
放入lambda并不会使任何事情变得更容易。事实上,它只会创建更多工作。
当然,如果您真的讨厌使用if
, 可以避免它,而不是它真的对您有所帮助:
foreach(var str in list??new List<string>())
Console.WriteLine(str);
foreach(var str in list == null ? new List<string>() : list)
Console.WriteLine(str);
如果对象不是Maybe
,您可以使用调用操作的方法来模拟功能更强的样式null
概念,而不是这比null
检查更容易在处理动作而不是函数时:
public static void Maybe<T>(this T obj, Action<T> action)
{
if (obj != null)
action(obj);
}
strList.Maybe(list =>
foreach(var str in list)
Console.WriteLine(str));