2015-07-22 76 views
3

我想訪問在ImageCollection類中聲明的列表。這是代碼。無法訪問列表<string>從另一個類

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的訪問列表:

ImageCollection image = new ImageCollection(); 
List<string> imgcol = image.getList(); 

結果是空的。 我的代碼有什麼問題?

+8

您正在再次實例化,因此它變爲空 – Sajeetharan

+1

它不爲null,但爲空。 –

+1

因爲您創建了新的空ImageCollection。但它不能爲空,它只是空的。 –

回答

1

在這裏,您將創建一個新的 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) 
    } 
} 
+0

請提及一個解決方案,即使用參數傳遞。如果不需要靜態,只需將'imgcol1'變量作爲參數傳遞給虛構的調用鏈。 – ntohl

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(); 

此外,請看看微軟命名指南 - https://msdn.microsoft.com/en-us/library/ms229002(v=vs.110).aspx - 因爲你的名字實例和方法以錯誤的方式。