共享项目列表VB.NET

时间:2014-08-20 13:23:25

标签: vb.net list reference

有任何方法可以让两个List(Of T)具有共享项目,我的意思是如果我修改一个列表中的一个项目,则在另一个列表中修改相同的项目。

2 个答案:

答案 0 :(得分:3)

List(Of T)如果T是引用类型(即某个类的实例),那么它是可能的。否则,IntegerStringDouble不是。

例如:

Dim list1 = new List(Of Cat)
Dim list2 = new List(Of Cat)

Dim cat1 = new Cat()
list1.add(cat1)
list2.add(cat1)

现在假设我们在其中一个列表

中改变cat
list1.first.color = "white"
System.WriteLine(list1.first.color)
System.WriteLine(list2.first.color)

你会在输出中看到两者都是白色。但想象你有一个`List(Of Integer)。然后在一个地方改变不会影响另一个。

修改

准确定义一个列表中的更改何时会反映在另一个列表中,我使用referenceinstance等词语。人们也讨论了Nullable(Of T),{{1}等主题等等,当这个魔法发生时,完全的精确定义,何时不是有点宽泛。因此,如果您碰巧遇到这些边缘情况,那么请再次询问一些代码示例。但是对于一般用法,知道这两个类实例在两个地方都会发生变化就足够了,Integer,String,Boolean,double等都不会。

答案 1 :(得分:0)

是的,完全可以使用对象,因为T将是一个引用,但你必须使用可变类型。 Immutables会在修改时有效地创建一个新对象,这可能无法提供您所需的结果。

要记住的另一件事是,当传递引用时,这些引用本身是按值传递的。

有两个列表改变一个改变另一个列表可能会在你的代码中引入奇怪的副作用。

尽可能依赖安全,不可变的对象并要求显式代码(即可读且可维护)。

相关问题