2012-09-21 41 views
1

我有一個列表,我已經添加了我的winform文本框,如下所示,但列表爲0,因爲計數從0開始,我如何使它基於?c#我如何使我的列表1基於而不是0基於

List<TextBox> textBoxList = new List<TextBox>(); 
textBoxList.Add(textBox1); 
textBoxList.Add(textBox2); 
textBoxList.Add(textBox3); 
textBoxList.Add(textBox4); 
textBoxList.Add(textBox5); 
textBoxList.Add(textBox6); 
textBoxList.Add(textBox7); 
textBoxList.Add(textBox8); 
textBoxList.Add(textBox9); 
textBoxList.Add(textBox10); 
textBoxList.Add(textBox11); 
textBoxList.Add(textBox12); 

我有其可以是從1到12的任何數量的指標,illd喜歡使用這個索引來找到正確的文本框,以便索引6將文本框6 ..而不是文本框5

+2

你不,真的。解釋你爲什麼要這樣做,我相信我們可以給你一個很好的指示,而不是嘗試什麼。 –

+3

你爲什麼需要這個? –

+0

可能重複的[從1開始索引不是從0](http://stackoverflow.com/questions/2799088/starting-index-from-1-not-from-0) – V4Vendetta

回答

-1

繼承人什麼我沒有和它似乎工作:d,很簡單我想..仍在學習..

        var tb = textBoxList; 
            int newDef = def - 1; 
            tb[newDef].Text = "occupied"; 
+3

或更簡潔:** textBoxList [def - 1] .Text =「佔用「**除非你得到這一行的付款:D – Charleh

3

你不能讓.NET的列表以一個爲基礎,但是你可以(1)每次閱讀時調整你的索引,或者(2)在0的位置插入一個無用的條目,然後忽略它(不推薦)。

你可以從列表繼承,並建立自己的數據結構來調整索引的進出方式,但這將需要更多的努力,更不用說讀者之間混淆的數量,所以我會強烈謹慎反對這樣做。

2

事情不這樣做 - 列表/數組訪問本質上是基於零索引的,而試圖藐視它的自定義實現會令人困惑(我個人認爲命名類是描述它的本質,如果這是它的本質,比其他地方的特定情況下的邏輯更難)。

什麼是用例?通常情況下,您可以通過遞增索引值來表示對用戶有意義的「當前」或「計數」值,或者可以從用戶角度調整輸入,但您的具體情況是什麼?

如果您想要根據您的更新執行操作,您可以通過索引獲取控件,您可以從0開始索引或按照提及的方式調整輸入(通過根據數組中需要的偏移量減小它) - 就像任何其他方法一樣,即使不是那麼容易,也很簡單,任何人都可以理解。

0

您可以定義自己的列表類,它擴展了內置類並在構造函數中插入第一個元素。

1

也許在你的情況下,它會更好地使用詞典?所以,你的代碼將變成:

Dictionary<int, TextBox> textBoxes = 
     new Dictionary<int, TextBox>(); 
textBoxes.Add(1, textBox1); 

但無論如何這是一個奇怪的要求。

0

一個頗爲尷尬的方式來解決你做集合索引的問題,1型是使用Array類。然後,您可以創建一個具有任意下限的數組實例。在你的情況是這樣的:

var textBoxList = Array.CreateInstance(typeof(TextBox), new[] {12}, new[] {1}); 

定義這個數組中的元素是較爲繁瑣:

... 
textBoxList.SetValue(textBox5, 5); 
... 

同樣,訪問的元素也相當明確:

var tb9ref = (TextBox)textBoxList.GetValue(9);