无法访问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();

结果为空。我的代码有什么问题?

无法访问List<string>来自另一个班级

这里创建了一个新的 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 -因为你以错误的方式命名实例和方法。