2012-11-25 50 views
0

這裏是我的示例代碼:是否有可能從一個列表保留在C#以前的值

private void button1_Click(object sender, EventArgs e) 
    { 
     listBox1.Items.Clear(); 
     foreach (var i in numbers()) 
     { 
      listBox1.Items.Add(i); 
     } 
    } 

    private List<int> numbers() 
    { 
     List<int> counts = new List<int>(); 
     for (int i = 1; i <= 5; i++) 
     { 
      counts.Add(i); 
     } 
     return counts; 
    } 

我想知道是否可以不覆蓋,並從List<>保持之前的值。在我的示例中,如果我點擊按鈕,它將在列表框中填充1,2,3,4,5,當我再次單擊按鈕時,我期待輸出爲1,2,3,4,5,1,2, 3,4,5這個值是我期望從我的List<>我怎麼可能做到這一點?順便說一句,這裏的列表框僅用於顯示目的。謝謝!

回答

1

隨着List<int> counts = new List<int>();,你創建一個新的空列表。每次致電numbers()時都會重新發生。

如果我正確理解您的問題,您希望numbers()將五個數字添加到現有的列表,因此隨着每次調用numbers()而增加。

爲了達到此目的,請不要在每次調用numbers()時創建一個新的List<int>作爲結果值返回;而是創建一個私有字段爲列表並調用numbers()修改:

private List<int> counts = new List<int>(); 

private List<int> numbers() 
{ 
    for (int i = 1; i <= 5; i++) 
    { 
     counts.Add(i); 
    } 
    return counts; 
} 

注意numbers()仍然會返回列表中,但它不是一個新的列表;每次都是相同的列表實例。

+0

是的。那就是我想要的 – GrayFullBuster

+0

我該如何做到這一點? ^^ – GrayFullBuster

+1

@GrayFullBuster:我剛剛添加了一些示例代碼,說明如何在'numbers()'方法之外聲明'counts'。 –

1

Clear刪除列表中的所有項目。如果你簡單要從新列表中的所有項目追加到舊列表使用AddRange

listBox1.Items.AddRange(numbers()); 
+0

是的,但是如果我刪除清晰的東西,我的列表將包含什麼? – GrayFullBuster

3

你只需要刪除listBox1.Items.Clear();因此。

除此之外,您可以使用Enumerable.Concat追加項目:

var num1 = numbers(); 
var num2 = numbers(); 
foreach(var num in num1.Concat(num2)) 
{ 
    // ... 
} 

或可能使用Enumerable.Range從一開始,假設你總是要添加相同的5個項目:

int currentCount = listBox1.Items.Count; 
int groupSize = 5; 
var allItems = Enumerable.Range(0, currentCount + groupSize) 
         .Select(i => 1 + i % groupSize); 
foreach(var item in allItems) 
{ 
    // ... 
} 
+0

是的,但我的列表包含什麼? – GrayFullBuster

+0

如果我點擊兩次以上的物品等,這是否適用? – GrayFullBuster

+1

@GrayFullBuster:添加了另一種方法來始終添加相同的數字組。 –

1

申報在課程級別數字()方法之外進行計數。每次調用這個方法都會將1,2,3,4,5添加到列表中。

private List<int> _counts = new List<int>(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    listBox1.Items.Clear(); 
    foreach (var i in numbers()) 
    { 
     listBox1.Items.Add(i); 
    } 
} 

private List<int> numbers() 
{ 
    for (int i = 1; i <= 5; i++) 
    { 
     _counts.Add(i); 
    } 
    return counts; 
} 
+0

是的,這個工程!與上面一樣謝謝 – GrayFullBuster

相關問題