无法从另一个类访问List <string>

时间:2015-07-22 07:38:28

标签: c#

我正在尝试访问在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();

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

2 个答案:

答案 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 - 因为您以错误的方式命名实例和方法。