我有一个列表列表,其中包含这样的 IntPtr
变量
var testList = new List<List<IntPtr>>();
我正在尝试从列表中选择IntPtr
变量,其中列表的大小大于 0 且 IntPtr
不等于 IntPtr.Zero
使用 Linq
我试过以下方法
var pointers = testList.Where(list => list.Count > 0)
.SelectMany(pointer => pointer != IntPtr.Zero);
我究竟做错了什么,我该如何修改此语句以使其按预期工作?
最佳答案
目前,您正在将谓词传递给 SelectMany
这不是它所期望的;相反,它期望的是 Func<List<IntPtr>, IEnumerable<IntPtr>>
其中 List<IntPtr>
是输入列表,IEnumerable<IntPtr>
是函数调用时返回的值。
SelectMany
然后将取每个嵌套的 IEnumerable<IntPtr>
并将其折叠成一个 IEnumerable<IntPtr>
.
除此之外,您还尝试使用 !=
由 List<IntPtr>
表示的序列 ( pointer
) 上的运算符这是行不通的。
相反,您应该首先通过 SelectMany
折叠嵌套序列。 然后通过 Where
应用谓词子句:
var pointers = testList.Where(list => list.Count > 0) // IEnumerable<List<IntPtr>>
.SelectMany(list => list) // IEnumerable<IntPtr>
.Where(pointer => pointer != IntPtr.Zero); // IEnumerable<IntPtr>
另一方面,您甚至不需要第一个 Where
子句,因为它可以简单地是:
var pointers = testList.SelectMany(list => list) // IEnumerable<IntPtr>
.Where(pointer => pointer != IntPtr.Zero); // IEnumerable<IntPtr>
关于c# - Linq 从列表中的多个列表中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913297/