我需要在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);
}
有什么建议吗? (对不起,为了清晰起见,很多编辑)
答案 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], ... };
}
所以你实际上不能使用数组(对于列),你需要一个合适的类。使用要绑定的属性名称。你不需要行数组(限制)。
从您所在的位置到您需要的地方的简单方法是使用匿名课程:
(从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.