我正在尝试访问在ImageCollection类中声明的List。这是代码。
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();
结果为空。 我的代码出了什么问题?
答案 0 :(得分:1)
在此处创建ImageCollection的 new 实例。这就是为什么它的属性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);
}
在你的主要形式中:
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)
}
}
答案 1 :(得分:0)
问题在于第一行:
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();
此外,请查看Microsoft的命名指南 - https://msdn.microsoft.com/en-us/library/ms229002(v=vs.110).aspx - 因为您以错误的方式命名实例和方法。