2

如何循环遍历通用列表并根据几个条件调用方法?我想使用 linq 语法。以下当然行不通。有任何想法吗?

somelist.ForEach(i => i.DeptType == 1 && i != null () {MyMethod(someInt)});

如果这不可能,那么使用简洁语法的下一个最佳方法是什么?

4

5 回答 5

6

尝试使用 Where 指定要选择的记录并使用 ForEach 来执行您的方法:

somelist.Where(i => i.DeptType == 1 && i != null)
           .ToList()
           .ForEach( i=> MyMethod(i.someInt));
于 2012-06-05T18:54:35.227 回答
4
//standard style ... since Linq is Functional/side-effects-free
foreach(var x in somelist.Where(i => i != null && i.DeptType == 1))
{
  SomeMethod(x);
}

//anon method style ... for those that must use ForEach
somelist.ForEach(i => {if (i != null && i.DeptType == 1) {MyMethod(someInt);}});
于 2012-06-05T19:05:26.743 回答
1

尽管单行 LINQ 查询可能很吸引人,但它们通常与没有任何副作用的操作相关联(例如查询投影、过滤等)。在您的情况下,使用传统foreach循环可能会更好地为您服务:

foreach (var i in somelist)
    if (i != null && i.DeptType == 1)
        MyMethod(someInt);

PS 您的原始状态 ,i.DeptType == 1 && i != null订购不正确。代码仍然会产生一个NullReferenceException因为在被空检查之前i.DeptType执行。 i

于 2012-06-05T19:04:00.170 回答
0

我会使用:

    somelist.Where(q => q !=null)
    .Where(q => q.DeptType == 1)
    .Select(q => MyMethod(q));

结果集合将包含原始值/方法调用的返回值列表。

于 2012-06-05T19:00:01.463 回答
0

需要记住的一件事是,您应该确保在访问对象的字段之前进行空值检查,如下所示:

somelist.Where(i => i != null && i.DeptType == 1).ToList().ForEach( i=> MyMethod(i.someInt));

正如上面有人指出的那样,您不能对从 Where() 调用返回的通用 IEnumerable 对象调用 ForEach() 。您必须首先调用 ToList() 以将结果保存到通用列表。我已经更新了上面的代码以包含该更改。

于 2012-06-05T19:02:42.237 回答