Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象指定给VB.NET中的对象列表不会存储该值_Vb.net_List_Object_Reference - Fatal编程技术网

将对象指定给VB.NET中的对象列表不会存储该值

将对象指定给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 为了将新项目添加到文件列表中,我创建了一个

我目前正在编写一个程序,将图像缩小到16x16像素,并用一个简单的自编算法计算差值。为了实现这一点,我希望从某个目录获取所有文件,并将它们存储到对象列表中,如下所示:

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
应该可以工作-但是没有上下文显示此代码