2011-12-10 39 views
0

我已經創建自定義列表:項目添加到我的自定義列表有局部範圍

public class BList : IEnumerable<Position> 
{ 
     private List<Position> positions = new List<BPosition>(); 
     public void Add(Position p) 
     { this.positions.Add(p); } 
     ... 
} 

比這個名單是類發票的成員:

public class Invoice : Record 
{ 
     public BList Positions = null; 
     public Invoice() 
      : base() 
     { 
      Init(); 
      this.Positions = new BList(this); 
     } 
     ... 
} 

現在,在窗體的構造我填充發票的收集和添加位置BList:

foreach(Invoice invoice in this.invoices) 
{ 
    // Load position for current invoice from the database 
    List<Position> positionsTmp = new List<Position>(); 
    DB.LoadRecordset(positionsTmp, "id_invoice=3"); 
    // and add to invoice positions items 
    positionsTmp.ToList().ForEach(p => invoice.Positions.Add(p)); 
} 

在每張發票的位置的名單是populat正確編輯。 但是,當我在同一類中的其他函數中使用list this.invoices時,每個發票都將位置列表清空(Count = 0)。它看起來像位置被添加到本地,並且當應用程序離開構造函數時,所有先前添加的位置BList被清除。 如何爲每個發票填充BList,以便他們在整個課程中都可用?

感謝

+0

你的代碼很混亂。我認爲'Invoice'類的構造函數被命名爲'Position'。當我認爲它需要訪問'this.Positions'時,它引用'this.Position'。當我認爲它需要'invoice.Positions.Add'時,構造函數中的'ForEach'調用'invoice.Position.Add'。請清理你的代碼,以便我能理解它。 –

+0

我更正了錯誤。 – Robert

+0

所以你說在你的'foreach'循環中,'invoice.Positions.Count()'的返回值是非零的,但是在代碼的稍後一點,這個值是零?如果是這樣的話,那麼其他的東西就是清除列表。 –

回答

0

如果你的類的名稱是「發票」,那麼構造函數必須被稱爲「發票」的可能。

在BList的構造函數中(我假設)你正在初始化一個名爲「positionsTmp」的本地列表。相反,將職位直接添加到「職位」。

+0

是的,你是對的在BList 是私人名單的立場添加到BList真的被添加到此私人列表名單。我無法添加到BList,因爲它僅實現IEnumarable。 – Robert

+0

我已更改爲BList:列表,結果如此。 – Robert

+0

我測試了你的代碼,它的工作原理。除了您提供的示例之外,問題必須出現在其他地方。 –

相關問題