【问题标题】:List(of String) or Array or ArrayListList(of String) 或 Array 或 ArrayList
【发布时间】:2012-10-27 18:16:33
【问题描述】:

希望对大多数有经验的程序员来说是一个简单的问题。

让我这样做的数据类型是什么?

Dim lstOfStrings as *IDK*

Dim String0 As String = "some value"
Dim String1 As String = "some value"
Dim String2 As String = "some value"
Dim String3 As String = "some value"
Dim String4 As String = "some value"
Dim String5 As String = "some value"


lstOfStrings.add(String0, String1, String2, String3)

我会像这样访问这些

Dim s1 = lstOfStrings(0)
Dim s2 = lstOfStrings(1) 
Dim s3 = lstOfStrings(2) 
Dim s4 = lstOfStrings(3)

如果我使用 List(of String) 我只能(一次)向列表中添加一件事,而在我的函数中,我希望能够(一次)存储多个值。

解决方案:

Private Function Foo() As List(Of String)


    Dim temp1 As String
    Dim temp2 As String 
    Dim temp3 As String 

    Dim temp4 As String 
    Dim temp5 As String 
    Dim temp6 As String 

    Dim inputs() As String = {temp1, temp2, temp3, temp4, temp5, temp6}

    Dim lstWriteBits As List(Of String) = New List(Of String)(inputs)


    Return lstWriteBits
End Function

【问题讨论】:

    标签: vb.net list collections


    【解决方案1】:

    对于那些坚持维护旧 .net 的人,这里有一个适用于 .net framework 2.x 的:

    Dim lstOfStrings As New List(of String)( new String(){"v1","v2","v3"} )
    

    【讨论】:

      【解决方案2】:

      有时我不想在实例化列表时将项目添加到列表中。

      实例化一个空白列表

      Dim blankList As List(Of String) = New List(Of String)
      

      加入列表

      blankList.Add("Dis be part of me list") 'blankList is no longer blank, but you get the drift
      

      遍历列表

      For Each item in blankList
        ' write code here, for example:
        Console.WriteLine(item)
      Next
      

      【讨论】:

      • Dim blankList As New List(Of String) 而不是你的呢?
      【解决方案3】:

      你可以这样做,

        Dim lstOfStrings As New List(Of String) From {"Value1", "Value2", "Value3"}
      

      Collection Initializers

      【讨论】:

      • “这是你要找的单线……”
      【解决方案4】:

      您可以在函数中使用IList(Of String):

      Private Function getWriteBits() As IList(Of String)
      
      
      Dim temp1 As String
      Dim temp2 As Boolean
      Dim temp3 As Boolean
      
      
      'Pallet Destination Unique
      Dim temp4 As Boolean
      Dim temp5 As Boolean
      Dim temp6 As Boolean
      
      Dim lstWriteBits As Ilist = {temp1, temp2, temp3, temp4, temp5, temp6}
      
      Return lstWriteBits
      End Function
      

      使用 list1.AddRange(list2)添加列表

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

        List(Of String) 将处理这个问题,主要是 - 尽管您需要使用 AddRange 添加项目集合,或使用 Add 一次添加一个:

        lstOfString.Add(String1)
        lstOfString.Add(String2)
        lstOfString.Add(String3)
        lstOfString.Add(String4)
        

        如果您要添加已知值,如您所见,一个不错的选择是使用以下内容:

        Dim inputs() As String = { "some value", _
                                      "some value2", _
                                      "some value3", _
                                      "some value4" }
        
        Dim lstOfString as List(Of String) = new List(Of String)(inputs)
        
        ' ...
        Dim s3 = lstOfStrings(3)
        

        这仍然允许您稍后根据需要添加项目,但也可以快速获取初始值。


        编辑:

        在您的代码中,您需要修复声明。变化:

        Dim lstWriteBits() As List(Of String) 
        

        收件人:

        Dim lstWriteBits As List(Of String) 
        

        目前,您正在声明一个 List(Of String) 对象数组。

        【讨论】:

        • 我可以访问像 Dim something as String = lstOfString(0) 这样的每个项目来获取 String1 值吗?
        • @BrandonJ 我刚刚编辑以显示您的访问要求 - 得到您想要的?
        • 非常感谢您的帮助,但是当我尝试这样做时我仍然做错了,并且无法转换 [type 'system.collections.generic.list(of String)' 的值到 System.Colelctions.Generic.List(of String)'] 的一维数组我要编辑我的帖子并显示我的实际代码
        • @BrandonJ 看起来你的声明是错误的——你可能有一个额外的()。有关 Dim 行,请参见我上面的声明...
        【解决方案6】:

        这两个集合都不允许您以这种方式添加项目。

        您可以进行扩展,例如 List(Of String) 有一个 Add 方法可以做到这一点:

        Imports System.Runtime.CompilerServices
        Module StringExtensions
        
          <Extension()>
          Public Sub Add(ByVal list As List(Of String), ParamArray values As String())
            For Each s As String In values
              list.Add(s)
            Next
          End Sub
        
        End Module
        

        现在您可以在一次调用中添加多个值:

        Dim lstOfStrings as New List(Of String)
        lstOfStrings.Add(String1, String2, String3, String4)
        

        【讨论】:

        • 我喜欢扩展方法方法。
        【解决方案7】:

        查看列表AddRange方法here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-11
          • 1970-01-01
          • 1970-01-01
          • 2014-07-22
          • 2017-05-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多