Vb.net 是否有一种方法可以将byVal添加到列表(列表(字符串))中?

Vb.net 是否有一种方法可以将byVal添加到列表(列表(字符串))中?,vb.net,pass-by-value,Vb.net,Pass By Value,我想反复向更大的列表集合添加字符串列表,但似乎list.add函数正在添加项byref。我如何更改下面的示例代码以通过val传递元素,以便在重复使用变量时不会清除它们: 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")

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

    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
这会写入一个异常,然后下一个debug.write语句会出现超出范围的异常

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

列表是一种引用类型。调用Clear时唯一不影响它的方法是将它的克隆添加到outer。您可以使用.ToList来执行此操作

但事实上,我认为最清晰的方法是分配一个新的列表,而不是调用clear,而不必执行上面的操作

inner = new List(Of String)

谢谢,有没有我遗漏的参考类型列表?我似乎经常碰到这个问题!所有结构都是值类型,所有其他结构都是引用类型。结构是值类型,类是引用类型,任何数字基类型(如Byte、Short、Integer等)都是值类型,日期是值类型,字符串是引用类型,在某些情况下表现为值类型。简而言之,任何可以为空的都是引用类型,其他都是值类型。@Nostromo除了Nullable之外,Nullable是一种可以为空的值类型。;-或者似乎什么都没有。就微软的文档而言,Nullable是一种结构,所以它不可能什么都没有。
inner = new List(Of String)