Arrays 将一个数组对象转换为IEnumerable

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.

我想比较两个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.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())