无法访问List来自另一个班级
本文关键字:另一个 string 访问 List | 更新日期: 2023-09-27 18:04:10
我试图访问在ImageCollection类中声明的列表。代码如下:
class ImageCollection
{
public List<string> imgCollection = new List<string>();
public void addImgCollection(string path)
{
imgCollection.Add(path);
}
public List<string> getList()
{
return imgCollection;
}
}
并使用以下代码将图像路径从AutoClass添加到imgCollection中。
ImageCollection imgcoll = new ImageCollection();
imgcoll.addImgCollection(img1);
imgcoll.addImgCollection(img2);
但是,当我从MainForm访问List时:
ImageCollection image = new ImageCollection();
List<string> imgcol = image.getList();
结果为空。我的代码有什么问题?
这里创建了一个新的 ImageCollection实例。这就是为什么它的属性imgCollection有它的默认值(即null )
:
ImageCollection image = new ImageCollection();
List<string> imgcol = image.getList();
我相信你想做的是:
public class AutoClass
{
public static ImageCollection imgcol1 = new ImageCollection();
// somewhere in your AutoClass:
imgcoll.addImgCollection(img1);
imgcoll.addImgCollection(img2);
}
然后你可以从你的MainForm类:
// copies collection to imgcol (therefore creates a new collection with samve values)
List<string> imgcol = AutoClass.imgcol1.imgCollection.ToList();
// saves reference to ImgCollection collection to imgcol variable (not copying anything)
List<string> imgcol = AutoClass.imgcol1.imgCollection;
如果你不想使用静态属性,你可以使用实例属性:
public class AutoClass
{
public ImageCollection imgcol1 = new ImageCollection();
// somewhere in your AutoClass:
imgcoll.addImgCollection(img1);
imgcoll.addImgCollection(img2);
}
在MainForm中:
public partial class MainForm : Form
{
AutoClass ac = new AutoClass();
...
void MyMethod
{
List<string> imgcol = ac.imgcol1.imgCollection;
// (you don't really need this GetList method of AutoClass at all)
}
}
问题在这里的第一行:
ImageCollection image = new ImageCollection();
List<string> imgcol = image.getList();
你正在创建ImageCollection类的新实例,所以它的imgCollection属性再次变为空。
在你的AutoClass中你应该把ImageCollection实例暴露给你的MainForm。
它看起来差不多是这样的
public class AutoClass
{
public ImageCollection Imgcoll { get; set; }
public AutoClass()
{
Imgcoll = new ImageCollection();
}
public void SomeMethod(someargs)
{
Imgcoll.addImgCollection(img1);
Imgcoll.addImgCollection(img2);
}
}
然后输入MainForm:
//autoClassInstance should be somewhere initialized and defined within MainForm
List<string> imgcol = autoClassInstance.ImgColl.getList();
此外,请看看微软的命名指南- https://msdn.microsoft.com/en-us/library/ms229002(v=vs.110).aspx -因为你以错误的方式命名实例和方法。