30

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

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

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
4

7 回答 7

42

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) 对象的数组。

于 2012-11-07T16:34:31.330 回答
34

你可以做这样的事情,

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

集合初始化器

于 2015-01-27T13:25:23.357 回答
4

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

您可以进行扩展以使例如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)
于 2012-11-07T16:48:05.850 回答
3

在此处查看 ListAddRange方法

于 2012-11-07T16:32:44.527 回答
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
于 2018-05-03T17:25:54.437 回答
0

您可以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)添加列表

希望能帮助到你。

于 2015-09-08T13:23:01.507 回答
0

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

Dim lstOfStrings As New List(of String)( new String(){"v1","v2","v3"} )
于 2020-08-04T20:15:37.327 回答