通过此方法添加项目后,如何遍历此类。我对通用列表很陌生,所以如果有人能指出我在数据表中正确的方向,我曾经想过要做以下事情:
For Each thisentry In dt.rows
Next
我在集合中使用什么
致电代码 在我的主要课程的分类中调用这个
Dim infoNoProductAvail As List(Of infoProductsNotFound) = New List(Of infoProductsNotFound)()
这是我添加文件的方式,但我已经检查了例程,列表的计数是2个产品
If medProductInfo.SKU.SKUID = 0 Then
infoNoProductAvail.Add(New infoProductsNotFound(thisenty2.Item("EAN13").ToString(), True))
End If
这是班级本身
Public Class infoProductsNotFound
Public Sub New(tbcode As String, notfound As Boolean)
Me.tagbarcode = tbcode
Me.notfound = notfound
End Sub
Private tagbarcode As String = String.Empty
Private notfound As Boolean
Public Property tbcode() As String
Get
Return tagbarcode
End Get
Set(ByVal value As String)
tagbarcode = value
End Set
End Property
Public Property isNotFound() As Boolean
Get
Return notfound
End Get
Set(ByVal value As Boolean)
notfound = value
End Set
End Property
End Class
尝试
我尝试使用以下
Function BuildExceptionsForEmail()
Dim retval As String = ""
Dim cnt As Int32 = 0
retval = "The following products are not avialable" & vbCrLf
For Each info As infoProductsNotFound In infoNoProductAvail
retval &= info.tbcode
cnt &= 1
Next
Return retval
但是由于某种原因,此时我的信息noproductAvail是空白的,即使在上面的例程中,它的数量是2,这给出了什么?
答案 0 :(得分:1)
首先我稍微收缩一下这个声明:
Dim infoNoProductAvail As New List(Of infoProductsNotFound)
接下来,迭代有几个选项。首先(以及你可能最常用的):
For Each info as infoProductsNotFound in infoNoProductAvail
If info.tbCode = "xyz" Then
DoSomething(info)
End If
Next
或者您可能想要使用lambda表达式(如果您使用.Net 3.5及以上版本,我认为 - 可能是.Net 4):
infoNoProductAvail.ForEach (Function(item) DoSomething(item))
请记住,泛型是强类型的(与旧的VB集合不同),因此无需抛出任何内容:您可以直接访问属性和方法。
If infoNoProductAvail(3).isNotFound Then
'Do something
End If
(这不是一个很好的例子,但你明白了。)
答案 1 :(得分:1)
For Each
语法是一样的。它对所有IEnumerable
个对象的工作方式相同。它的唯一“技巧”是确保迭代器变量的类型正确,并确保迭代正确的对象。
对于DataTable
,您正在迭代它的Rows
属性。该属性是一个IEnumerable
对象,包含DataRow
个对象的列表。因此,要使用For Each
迭代它,必须使用类型为DataRow
的迭代器变量(或其基类之一,例如Object
)。
要遍历通用List(Of T)
,IEnumerable
对象本身就是List
对象。你不需要去其中一个属性。迭代器的类型需要匹配列表中项目的类型:
For Each i As infoProductsNotFound In infoNoProductAvail
' ...
Next
或者:
Dim i As infoProductsNotFound
For Each i In infoNoProductAvail
' ...
Next
或者:
For Each i As Object In infoNoProductAvail
' ...
Next
等