0

我需要在 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

4 回答 4

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,所以......

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

从你所在的地方到你需要去的地方的一种简单方法是使用匿名类:

(从蒂姆那里借来一段)

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 等

于 2013-08-14T20:39:03.780 回答
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();
于 2013-08-14T20:43:33.617 回答
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]

其中第一个索引是列表的一项,第二个索引是数组的索引。

您也可以调用ToArray()并获取string[].

于 2013-08-14T20:41:44.183 回答
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.
于 2013-08-14T20:43:43.977 回答