【发布时间】:2014-05-14 14:53:19
【问题描述】:
我的问题如下:
Dim dt As DataTable = GetSomeDataTable()
Dim exceptions As List(Of String())({{"a","b"},{"c","d"}})
For Each j As Integer In Enumerable.Range(0, dt.Rows.Count) _
.Where(Function(j1) exceptions.Contains({CStr(dt.Rows(j1)(0)), CStr(dt.Rows(j1)(1)}))
' Do something
Next
在上面,循环中的代码永远不会执行,即使 dt 中有行具有第一个元素“a”,第二个元素“b”,例如,因为 IEnumerable.Contains 方法不匹配一个数组 {" a", "b"} 和另一个数组 {"a", "b"}。我猜比较是通过引用而不是通过值来完成的?我想要的是 Contains 方法考虑两个数组 A 和 B 相等,当且仅当 A(i) = B(i) 对于所有 i = 0, 1, ... 。我也注意到 IEnumerable.Distinct() 的这种行为,并通过制作自定义 EqualityComparer 来克服它,但我觉得这很麻烦。有谁知道实现这一目标的更巧妙的方法?或者只是比较.Net中多元素主键的一般方法? (用非法字符连接字符串不算数。)
【问题讨论】:
标签: .net arrays vb.net linq iequalitycomparer