C# 使用索引在数组上迭代并根据索引赋值
今天早些时候我遇到了一个问题,因为我找不到一个满意的解决方案,我决定改变我的类设计,并拥有单独的属性,如标记1、标记2、标记3等 我的主要问题是,我需要将一个网格绑定到一个包含列表和其他属性的对象,并且需要将列表中的每个项显示为一个单独的列,这是我无法做到的。因此,我求助于单独声明变量 现在,我面临着一个最常见的设计问题,可能每个程序员在某个时候都会遇到这个问题。下面是演示它的代码C# 使用索引在数组上迭代并根据索引赋值,c#,c#-4.0,design-patterns,C#,C# 4.0,Design Patterns,今天早些时候我遇到了一个问题,因为我找不到一个满意的解决方案,我决定改变我的类设计,并拥有单独的属性,如标记1、标记2、标记3等 我的主要问题是,我需要将一个网格绑定到一个包含列表和其他属性的对象,并且需要将列表中的每个项显示为一个单独的列,这是我无法做到的。因此,我求助于单独声明变量 现在,我面临着一个最常见的设计问题,可能每个程序员在某个时候都会遇到这个问题。下面是演示它的代码 for (int i = 0; i < tags.Length; ++i) // Length not kn
for (int i = 0; i < tags.Length; ++i) // Length not known here.
{
if(i==0){
tag1 = tags[0];
}
else if(i == 1){
tag2 = tags[1];
}
else if(i == 2){
tag3 = tags[2];
}
....
}
for(inti=0;i
这里的标签是一个字符串数组
我想知道是否有更优雅的方式来做这件事。另一件需要注意的事情是,这个循环的效率随着它的进行而降低,因为随着迭代次数的增加,它必须检查更多的条件。如果我们可以在条件变为真后删除一次,它将加快每次迭代,因为我们知道每个条件在所有迭代中只会变为真一次移动回答关于
DataGridView
并使用ComponentModel
来回答正确的问题:
简报
DataGridView
controll支持ComponentModel
名称空间,以便您可以创建似乎具有不存在的属性的类。这与PropertyGrid
使用的机制相同
该问题的答案中包含示例代码:
旧答案
这是我以前的回答,当时我没有意识到真正的问题是关于DataGridView
控件的
这与直接设置值不一样吗:
this.tag1 = tags[0];
this.tag2 = tags[1];
this.tag3 = tags[2];
编辑:正如您所说,您不知道需要多少个变量,那么您只需要一个,这是一个列表:
var list = new List<string>();
for (int i = 0; i < tags.Length; ++i)
{
list.add(tags[i]);
}
var list=newlist();
对于(int i=0;i
如果您只想复制所有值,甚至可以执行以下操作:
var list = new List<string>(tags);
var list=新列表(标签);
告诉我这是不是你想要的。。。可能我误解了这个问题。移动了关于
DataGridView
的答案,并使用ComponentModel
来回答正确的问题:
简报
DataGridView
controll支持ComponentModel
名称空间,以便您可以创建似乎具有不存在的属性的类。这与PropertyGrid
使用的机制相同
该问题的答案中包含示例代码:
旧答案
这是我以前的回答,当时我没有意识到真正的问题是关于DataGridView
控件的
这与直接设置值不一样吗:
this.tag1 = tags[0];
this.tag2 = tags[1];
this.tag3 = tags[2];
编辑:正如您所说,您不知道需要多少个变量,那么您只需要一个,这是一个列表:
var list = new List<string>();
for (int i = 0; i < tags.Length; ++i)
{
list.add(tags[i]);
}
var list=newlist();
对于(int i=0;i
如果您只想复制所有值,甚至可以执行以下操作:
var list = new List<string>(tags);
var list=新列表(标签);
告诉我这是不是你想要的。。。也许我误解了这个问题。这基本上是一样的:
for(int index = 0; index < tags.Length[]; index++){
switch(index){
case 0:
tag1 = tags[0];
break;
// And so on
}
}
for(int index=0;index
这基本上是一样的:
for(int index = 0; index < tags.Length[]; index++){
switch(index){
case 0:
tag1 = tags[0];
break;
// And so on
}
}
for(int index=0;index
整个循环毫无意义。但除非标签数组长度总是相同,否则必须确保不超出边界
if(tags.Length >= 1) this.tag1 = tags[0];
if(tags.Length >= 2) this.tag2 = tags[1];
if(tags.Length >= 3) this.tag3 = tags[2];
if(tags.Length >= 4) this.tag4 = tags[3];
if(tags.Length >= 5) this.tag5 = tags[4];
。。。因此,不管你有多少这个.tag。整个循环都是毫无意义的。但除非标签数组长度总是相同,否则必须确保不超出边界
if(tags.Length >= 1) this.tag1 = tags[0];
if(tags.Length >= 2) this.tag2 = tags[1];
if(tags.Length >= 3) this.tag3 = tags[2];
if(tags.Length >= 4) this.tag4 = tags[3];
if(tags.Length >= 5) this.tag5 = tags[4];
。。。因此,不管你有多少个this.tag。出于好奇,为什么需要将
标记的元素分配给各个变量?数组的全部目的是防止我们需要一个连续序列的单个变量……正如詹姆斯所说。似乎这是在倒退。那是什么标签。长度[]
???它似乎无效。@James,我从用户的文本框中接收到这个逗号分隔值,然后我继续使用string.split(',')拆分字符串以获得该数组。如果您想将它们分配给更有意义的变量,这很好,但您应该按照@MiguelAngelo的建议直接执行。出于好奇,为什么需要将标记的元素
分配给各个变量?数组的全部目的是防止我们需要一个连续序列的单个变量……正如詹姆斯所说。似乎这是在倒退。那是什么标签。长度[]???它似乎无效。@James,我在一个文本框中收到用户以逗号分隔的值表示的结果,然后我继续使用string.split(',')分割字符串以获得该数组。如果您想将它们分配给更有意义的变量,这很好,但您应该按照@MiguelAngelo的建议直接执行。不幸的是,这并没有更好的效果。。。好吧,稍微好一点,因为它可能会在幕后使用跳转表而不是if梯形图,但当一个人只需按照@MiguelAngelo的建议做,或者只使用arrayYeah时,仍然是不必要的,我知道,但我不知道他是否必须使用循环(出于某种原因)来不分配变量