Arrays 将一个数组对象转换为IEnumerable
我想比较两个DataGridView,并在Arrays 将一个数组对象转换为IEnumerable,arrays,vb.net,list,except,Arrays,Vb.net,List,Except,我想比较两个DataGridView,并在IEnumerable界面上使用Except方法,以了解它们之间的差异。 我的DataGridView的一个示例: DG1 idProduct Item 1 Item A 1 Item B 2 Item C 2 Item D DG2 idProduct Item Price IdSupplier 1 Item A 10.
IEnumerable
界面上使用Except
方法,以了解它们之间的差异。
我的DataGridView的一个示例:
DG1
idProduct Item
1 Item A
1 Item B
2 Item C
2 Item D
DG2
idProduct Item Price IdSupplier
1 Item A 10.00 1
1 Item B 20.00 1
2 Item C 30.00 1
2 Item D 40.00 1
1 Item A 20.00 3
1 Item B 30.00 3
2 Item C 40.00 3
2 Item D 50.00 3
因此,我尝试了IEnumerable.Except
,但我的itemArray()
似乎是一个对象,因为当我尝试强制转换exceptItems
时,我收到了消息“System.linq.Enumerable+d_99'1[System.object]”
,如下所示:
Dim exceptItems = itemListArray.Except(itemArray(2))
我也尝试过:
Dim onlyInFirstSet As IEnumerable(Of String) = itemListArray.Except(itemArray(2))
Dim output As New System.Text.StringBuilder
For Each str As String In onlyInFirstSet
output.AppendLine(str)
Next
MsgBox(output.ToString())
我知道我犯了错误。13号。我想问题是我必须将
itemArray()
转换成IEnumerable
,有没有什么方法可以在不对代码进行重大更改的情况下实现这一点?由于您没有选项strict
,编译器不知道您的itemArray()是什么类型的
就是这样,它使用对象的最小公分母
您应该启用option strict,然后修复错误。您可以在项目属性中执行此操作,也可以使用
选项在类的顶部执行此操作。不使用strict是vb6的一个延迟,它确实有助于避免类似的问题。这将迫使你定义你的变量 除外
仅在IEnumerable(Of T)
界面上,而不是在普通的IEnumerable
上
IEnumerable(Of T)
是在普通数组上实现的,因此您不必双重加载数据
另外,由于Except
是一种扩展方法,因此需要导入System.Linq
您好,谢谢!那么,有没有办法将system.string对象转换为system.IEnumerable(of T)?嗯,字符串是IEnumerable(of Char)。。。但这似乎不是你需要的…你好,谢谢!我看到如果我实现IEnumerable,我将得到一个IEnumerable(of Char)。为了避免这种情况,我可能应该使用list或Arraylist,并避免使用.toarray方法?没关系!由于将其用于dgv1列表值没有问题,如何使用它们来存储dgv2中的值?谢谢上帝啊!谢谢我打开了这个东西,看到了很多工作…我会再次关闭它。。。
Dim onlyInFirstSet As IEnumerable(Of String) = itemListArray.Except(itemArray(2))
Dim output As New System.Text.StringBuilder
For Each str As String In onlyInFirstSet
output.AppendLine(str)
Next
MsgBox(output.ToString())