使用索引迭代数组并根据索引分配值

Abi*_*tro 0 c# design-patterns c#-4.0

我今天早些时候遇到了这个问题,由于我找不到令人满意的解决方案,我决定改变我的班级设计,并且具有单独的属性,如标签1,标签2,标签3等.

我的主要问题是我需要将网格绑定到包含其他属性列表的对象,我需要将列表中的每个项目显示为单独的列,我无法做到.因此,我正在分别声明变量.原始问题在这里......

现在,我正面临着一个最常见的设计问题,可能是每个程序员在某些时候都有这个问题.这是演示它的代码,

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];
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)

tags是一个字符串数组.

我想知道是否有更优雅的方式来做到这一点.另外需要注意的是,这个循环的效率随着它的进展而降低,因为随着迭代次数的增加,它必须检查更多的条件.如果我们知道每个条件在所有迭代中变为一次,那么我们可以在条件成为之后移除它.

Mig*_*elo 7

移动答案DataGridView并使用ComponentModel正确的问题: 在网格视图中显示包含列表的对象列表

简报

DataGridView控制研究支持ComponentModel命名空间,这样就可以创建一个看起来有不存在的属性的类.它的PropertyGrid用途与机制相同.

示例代码在该问题的答案中:https: //stackoverflow.com/a/13078735/195417

老答复

这是我之前的回答,当时我没有意识到真正的问题是关于DataGridView控制.


这与直接设置值不同:

this.tag1 = tags[0];
this.tag2 = tags[1];
this.tag3 = tags[2];
Run Code Online (Sandbox Code Playgroud)

编辑:正如你所说,你不知道需要多少变量,那么你只需要一个,这是一个列表:

var list = new List<string>();
for (int i = 0; i < tags.Length; ++i)
{
    list.add(tags[i]);
}
Run Code Online (Sandbox Code Playgroud)

如果你想要的只是复制所有值,你甚至可以这样做:

var list = new List<string>(tags);
Run Code Online (Sandbox Code Playgroud)

告诉我这是否是你想要的......也许我误解了这个问题.