使用for循环的字符串数组声明

时间:2013-08-14 20:36:12

标签: c# arrays for-loop declaration

我需要在C#中声明包含数组的32个字符串数组。 把它全部写出来的工作就好了:

string[] row1 = new string[] { "NO.", "DATA BIN", "BIT2", "BIT1", };
string[] row2 = new string[] { "1", DataBin[1], BitLabels[1, 1], BitLabels[0, 1], };
string[] row3 = new string[] { "2", DataBin[2], BitLabels[1, 2], BitLabels[0, 2], };
string[] row4 = new string[] { "3", DataBin[3], BitLabels[1, 3], BitLabels[0, 3], }; 

但如果我能像这样创建它们会更清洁/更容易:

string[] row1 = new string[] { "NO.", "DATA BIN", "BIT2", "BIT1", };
for (int i = 2; i < 33; i++)
{
string[] row(i) = new string[] { Convert.ToString(i), DataBin[i], BitLabels[1, i], BitLabels[0, i], };
}

问题是我无法索引实例名称(例如row1)

这适用于DataGridView,因此我还需要注意以下事项:

object[] rows = new object[] { row1 , row2 , row3 , row4 , row5 , row6 , row7 , row8 , row9 ,
                               row10 , row11 , row12 , row13 , row14 , row15 , row16 , row17 ,
                               row18 , row19 , row20 , row21 , row22 , row23 , row24 , row25 ,
                               row26 , row27 , row28 , row29 , row30 , row31 , row32 , row33 };            
foreach (string[] rowArray in rows)
        {
            myDataGridView.Rows.Add(rowArray);
        }

有什么建议吗? (对不起,为了清晰起见,很多编辑)

4 个答案:

答案 0 :(得分:5)

您可以使用多维([,])或锯齿状([][])数组。

根据你的例子,我会选择锯齿状(数组数组):

string[][] rows = new string[32][];

for (int i = 0; i < rows.Length; i++)
{
    int n = i+1;  // you seem to use 1 as origin
    rows [i] = new string[] { n.ToString(), DataBin[n], ... };
}

编辑:这是针对DataGridView的,所以......

所以你实际上不能使用数组(对于列),你需要一个合适的类。使用要绑定的属性名称。你不需要行数组(限制)。

从您所在的位置到您需要的地方的简单方法是使用匿名课程:

(从Tim借来一块)

var rows = Enumerable.Range(1, 32)
     .Select(i => new {   // this is the anon class
         Index = i.ToString(),   // on-the-fly property 'Index'
         Text1 = DataBin[i], 
         Text2 = BitLabels[2, i], 
         Text3 = BitLabels[1, i],  /* etc */ }
       );

然后您可以将列绑定到Index,Text1,Text2等

答案 1 :(得分:3)

也许你想使用Linq:

string[][] rows = Enumerable.Range(1, 32)
    .Select(i => new [] { i.ToString(), DataBin[i], BitLabels[2, i], BitLabels[1, i], BitLabels[0, i], })
    .ToArray();

答案 2 :(得分:2)

您可以使用List<string[]>作为示例:

var rows = new List<string[]>();

for (int i = 0; i < 32; i++)
{
   rows.Add(new string[] { Convert.ToString(i), DataBin[i], BitLabels[2, i], BitLabels[1, i], BitLabels[0, i] });
}

之后,可以使用rows对象并通过

进行访问

rows[0][3]

第一个索引是List的项目,第二个索引是数组的索引。

您也可以致电ToArray()并获取一系列string[]

答案 3 :(得分:1)

看起来你差不多了。阵列答案很好。另一种可能的方法是使用列表。如果需要,您可以稍后将列表转换为数组。正如您所看到的,代码干净且易于理解。

var rows = new List<string[]>();
for (int i = 0; i < 32; i++)
{
    var row = new string[] { Convert.ToString(i), DataBin[i], BitLabels[2, i], BitLabels[1, i], BitLabels[0, i], };
    rows.Add(row);
}

// use rows.ToArray() if you need it to be an array or arrays later.