我有一个列表,我已经将winform文本框添加到它,如下所示,但列表是0基础,因为计数从0开始,我如何使它基于1?
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之间的任何数字,因为喜欢使用此索引查找正确的文本框,因此索引6将是textbox 6 ..而不是textbox 5
答案 0 :(得分:3)
您不能将.NET列表设置为一个,但您可以(1)每次读取时将索引调低一个,或者(2)在位置0
处插入无用的条目并在之后忽略它(不推荐)。
您可以从列表继承,并构建自己的数据结构,在进出的路上调整索引,但这需要更多的努力,更不用说读者之间的混淆,所以我会强烈提醒反对这样做。
答案 1 :(得分:2)
事情不是这样做的 - 列表/数组访问本质上是基于零索引的,并且尝试无视这种情况的自定义实现会令人困惑(我个人认为命名一个类来描述其性质,如果这样如果是它的性质,将比在其他地方为特定案例做逻辑更难。)
用例是什么?通常,您可以通过递增索引值来表示对用户有意义的“当前”或“计数”值,或者可以从用户角度调整输入到所需的值,但是你的具体情况是什么?
如果根据您的更新,您想要做的是通过索引获得控件,您可以从0开始索引或调整输入(如根据数组中所需的偏移量减少它) - 与任何其他方法一样,这对于任何人来说都是如此简单,如此简单易懂,直截了当。
答案 2 :(得分:1)
也许在你的情况下,使用Dictionary会更好吗?因此,您的代码将转换为:
Dictionary<int, TextBox> textBoxes =
new Dictionary<int, TextBox>();
textBoxes.Add(1, textBox1);
但无论如何这是一个奇怪的要求。
答案 3 :(得分:0)
您可以定义自己的列表类,该类扩展内置类并在构造函数中插入第一个元素。
答案 4 :(得分:0)
解决使收集索引从1开始的问题的一个相当尴尬的方法是使用Array类。然后,您可以创建具有任意下限的数组实例。在你的情况下,它看起来像这样:
var textBoxList = Array.CreateInstance(typeof(TextBox), new[] {12}, new[] {1});
定义此数组中的元素有点麻烦:
...
textBoxList.SetValue(textBox5, 5);
...
同样,访问元素也很明确:
var tb9ref = (TextBox)textBoxList.GetValue(9);
答案 5 :(得分:-1)
var tb = textBoxList;
int newDef = def - 1;
tb[newDef].Text = "occupied";