【问题标题】:Is there a method to add to a list (of list(of String)) byVal?有没有一种方法可以将 byVal 添加到列表(列表(字符串))中?
【发布时间】:2018-09-24 11:17:10
【问题描述】:

我想重复地将字符串列表添加到更大的列表集合中,但似乎 list.add 函数正在添加项目 byref。如何更改以下示例代码以传递元素 byval 以便在我重用变量时不会清除它们:

    Dim inner As New List(Of String)
    Dim outer As New List(Of List(Of String))
    Dim eleCount As Integer = 0
lbltop:
    inner.Add("a")
    inner.Add("b")
    inner.Add("c")

    outer.Add(inner)
    Debug.Write(outer(0)(0).ToString())
    inner.Clear()

    Debug.Write(outer(0)(0).ToString())

    eleCount += 1
    If eleCount < 2 Then
        GoTo lbltop
    End If

这会写入a,然后下一个debug.write 语句出现超出范围的异常。

我希望它写 aa 然后循环添加另一个内部元素。

【问题讨论】:

    标签: vb.net pass-by-value


    【解决方案1】:

    List&lt;T&gt; 是一个引用类型。调用Clear() 时不影响它的唯一方法是将其克隆添加到外部。您可以使用.ToList()

    outer.Add(inner.ToList())
    

    但我实际上认为最清晰的方法是为内部分配一个新的列表,而不是调用 Clear,而不是上面你不必这样做。

    inner = new List(Of String)
    

    【讨论】:

    • 谢谢,有没有我遗漏的引用类型列表?我似乎经常碰到这个问题!
    • 所有结构都是值类型和所有其他引用类型。
    • Structures 是值类型,Classes 是引用类型,任何数值基类型如ByteShortInteger 等都是值类型,Date是一个值类型,String 是一个引用类型,在某些方面表现为值类型。简而言之,任何可以是Nothing 的都是引用类型,其他任何东西都是值类型。
    • @Nostromo 除了Nullable&lt;T&gt; 是一个可以为空的值类型。 ;-)(或似乎什么都不是)
    • 就微软文档而言,Nullable&lt;T&gt;Structure,所以它不可能是Nothing
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2011-03-25
    • 2010-09-20
    • 2023-02-13
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多