Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c如何使列表以1为基础而不是以0为基础_C#_List - Fatal编程技术网

C# c如何使列表以1为基础而不是以0为基础

C# c如何使列表以1为基础而不是以0为基础,c#,list,C#,List,我有一个列表,我已将winform文本框添加到其中,如下所示,但该列表是基于0的,因为计数从0开始,如何使其基于1 List<TextBox> textBoxList = new List<TextBox>(); textBoxList.Add(textBox1); textBoxList.Add(textBox2); textBoxList.Add(textBox3); textBoxList.Add(textBox4); textBoxList.Add(textBox

我有一个列表,我已将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将是文本框6。。与文本框5不同,您不能使.NET的列表以一个为基础,但您可以1在每次阅读时将索引向下调整一,或2在位置0插入一个无用的条目,然后忽略它,这是不推荐的


您可以从列表中继承,并构建自己的数据结构,以便在输入和输出的过程中调整索引,但这需要付出更多的努力,更不用说读者之间的混乱程度,因此我强烈警告不要这样做。

您不能使.NET的列表基于,但您可以1在每次阅读时将索引向下调整1,或2在位置0处插入一个无用的条目,然后忽略它,这是不推荐的


您可以从列表中继承,并构建自己的数据结构,在输入和输出的过程中调整索引,但这需要付出更多的努力,更不用说读者之间的混乱程度,因此我强烈警告不要这样做。

事情不是这样做的-列表/数组访问本质上是基于零索引的,如果一个自定义的实现试图挑战这一点,那会让人感到困惑。我个人认为,命名一个类来描述它的性质,如果这是它的性质的话,将比在其他地方为一个特定的案例做逻辑更加困难

用例是什么?通常,您可以通过增加索引值来表示对用户有意义的“当前”或“计数”值,或者从用户角度调整输入以满足需要,但您的具体情况是什么


如果您想根据您的更新,通过索引获取控件,您可以从0开始索引,或者根据数组中所需的偏移量减少输入,从而调整输入-这同样简单,即使不简单,也足够简单,让任何人都能理解,与任何其他方法一样。

事情不是这样做的-列表/数组访问本质上是基于零索引的,而试图克服这一点的自定义实现会让人困惑。我个人认为,命名一个类来描述它的性质,如果这是它的性质,将比在其他地方对特定情况进行逻辑更难

用例是什么?通常,您可以通过增加索引值来表示对用户有意义的“当前”或“计数”值,或者从用户角度调整输入以满足需要,但您的具体情况是什么


如果您想根据您的更新,通过索引获取控件,您可以从0开始索引,或者根据数组中所需的偏移量减少输入,从而调整输入-这同样简单,即使不简单,也足够简单,让任何人都能理解,与任何其他方法一样。

您可以定义自己的列表类来扩展内置类并在构造函数中插入第一个元素。

您可以定义自己的列表类来扩展内置类并在构造函数中插入第一个元素。

在您的情况下,使用字典可能会更好?因此,您的代码将转换为:

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

但无论如何,这是一个奇怪的要求。

也许在你的情况下,使用字典会更好?因此,您的代码将转换为:

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

但不管怎样,这是一个奇怪的要求。

以下是我所做的,并且似乎有效:D,我想这足够简单了。。还在学习

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

以下是我所做的,并且似乎有效:D,我想这很简单。。还在学习

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

解决集合索引基于1的问题的一个相当尴尬的方法是使用类。然后可以创建具有任意下限的数组实例。在您的情况下,它将如下所示:

var textBoxList = Array.CreateInstance(typeof(TextBox), new[] {12}, new[] {1});
定义此数组中的元素有些麻烦:

...
textBoxList.SetValue(textBox5, 5);
...
同样,访问元素也是相当明确的:

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

解决集合索引基于1的问题的一个相当尴尬的方法是使用类。然后可以创建具有任意下限的数组实例。在您的情况下,它将如下所示:

var textBoxList = Array.CreateInstance(typeof(TextBox), new[] {12}, new[] {1});
定义此数组中的元素有些麻烦:

...
textBoxList.SetValue(textBox5, 5);
...
同样,访问元素也是相当明确的:

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

你真的不知道。解释你为什么要这样做,我相信我们可以给你一个很好的指针,告诉你应该尝试什么。可能的重复我有一个索引,可以是1到12之间的任何数字,我想用这个索引找到正确的文本框,所以索引6将是文本框6。。而不是文本框5@AndersHolmströmYou不,真的。解释你为什么要这样做,我相信我们可以给你一个很好的指示,告诉你应该尝试什么
我有一个索引,可以是1到12之间的任何数字,我想用这个索引来找到正确的文本框,这样索引6就是文本框6。。而不是textbox 5@AndersHolmströmOr更简洁:textBoxList[def-1]。Text=除非您通过该行付款,否则将被占用:DOr更简洁:textBoxList[def-1]。Text=除非您通过该行付款,否则将被占用:D