将对象指定给VB.NET中的对象列表不会存储该值
我目前正在编写一个程序,将图像缩小到16x16像素,并用一个简单的自编算法计算差值。为了实现这一点,我希望从某个目录获取所有文件,并将它们存储到对象列表中,如下所示:将对象指定给VB.NET中的对象列表不会存储该值,vb.net,list,object,reference,Vb.net,List,Object,Reference,我目前正在编写一个程序,将图像缩小到16x16像素,并用一个简单的自编算法计算差值。为了实现这一点,我希望从某个目录获取所有文件,并将它们存储到对象列表中,如下所示: Dim lFile As New List(Of cFile) 对象本身由文件路径字符串和16×16宏图像组成: Class cFile Public sFilepath As String Public imageResized As Image End Class 为了将新项目添加到文件列表中,我创建了一个
Dim lFile As New List(Of cFile)
对象本身由文件路径字符串和16×16宏图像组成:
Class cFile
Public sFilepath As String
Public imageResized As Image
End Class
为了将新项目添加到文件列表中,我创建了一个新对象,该对象将被修改,并用于将新项目添加到列表中:
Static Test As New cFile
Test.imageResized = ResizeImage(PictureBox1.Image)
Test.sFilepath = "image 1"
lFile.Add(Test)
现在我的问题是:将对象分配给列表中的一个新项只会以某种方式将其分配给“ByReference”(老实说,我不知道如何称呼它,也不知道我必须搜索什么)。我想要的是列表中的新项保持不变,并且在更改“Test”时不会更改,因为它会得到一些新的内容。
代码有点大,但为了清晰起见,我删掉了不重要的部分。如果有人能帮助我,我会非常高兴。谢谢 类就是这样工作的,它们是引用类型。如果要将
cFile
声明为一个结构,那么它将是一个值类型,并按照您想要的方式进行操作
但我不确定这是否是正确的解决方案。如果您正在更改cFile
对象的内容,那么仅此一项就表明它应该是一个类
NET框架中的绝大多数类型都是类,这是有充分理由的。我建议您只需要改变思考和处理类型的方式,以正确使用类
如果将
cFile
对象添加到列表后确实需要更改该对象,则应复制并更改该对象。您可以让类实现IClonable
,并在内部进行复制。如果不更完整地描述您实际想要实现的目标,而不仅仅是如何实现目标,就很难说什么是最佳选择。为什么是静态的?如果您只是将“Dim Test as New cfile”放在一起,会发生什么情况?Dim Test as New cfile
应该可以工作-但是没有上下文显示此代码