Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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#_C# 4.0_Design Patterns - Fatal编程技术网

C# 使用索引在数组上迭代并根据索引赋值

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

今天早些时候我遇到了一个问题,因为我找不到一个满意的解决方案,我决定改变我的类设计,并拥有单独的属性,如标记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];
    }
    ....
}
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时,仍然是不必要的,我知道,但我不知道他是否必须使用循环(出于某种原因)来不分配变量