如何避免列表中的运行时错误(Enum(asByte))。AddRange(List(of Byte))

时间:2014-11-24 15:58:43

标签: vb.net enums

我写了下面的示例代码,反映了我的困境:

Private Enum myEnum As Byte
  value_0 = 0
  value_1 = 1
  value_2 = 2
End Enum

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim objList_Bytes As New List(Of Byte)

    objList_Bytes.Add(0)
    objList_Bytes.Add(1)
    objList_Bytes.Add(2)

    Dim objList_enum As New List(Of myEnum)
    objList_enum.AddRange(objList_Bytes)
End Sub

我在库存控制程序中保留Enums列表以跟踪诸如ItemType,MakeOrBuy等内容,并且这些枚举被声明为As Byte或者As Short。在不同的点,我需要将列表(字节)的内容添加到List(枚举(作为字节))。问题是,当我运行示例代码时,我收到此错误:

无法转换类型为'System.Collections.Generic.List 1[System.Byte]' to type 'System.Collections.Generic.IEnumerable的对象1 [Windows_Forms_Application_x64_FormException_Project1.Form1 + myEnum]'。

有没有办法在我尝试时执行AddRange而无需为每个列表手动编写For循环,从而添加每个单独的项目?

...谢谢

1 个答案:

答案 0 :(得分:0)

好的,结果我回答了我自己的问题。此代码效率稍低,但足够抽象以适用于许多场景:

Public Shared Sub List_ConvertLists_Boxed(Of SourceType, DestType)(ByVal objList_SrcItems As List(Of SourceType), ByRef return_objList_DstItems As List(Of DestType))
    Dim z As Integer
    For z = 0 To objList_SrcItems.Count - 1
        return_objList_DstItems.Add(CObj(objList_SrcItems(z)))
    Next z
End Sub