3
for (int i = 0; i < DT1.Rows.Count; i++)
{
    PivotGridField field + i = new PivotGridField();
}

当然,这段代码是行不通的,但是如何使它以这种方式工作,因为我需要创建未知数量的字段。

谢谢!

4

5 回答 5

3

您不能即时创建字段(或在本例中为变量)。你可以做的是有一个数组/列表/类似:

PivotGridField[] fields = new PivotGridField[DT1.Rows.Count];
for (int i = 0; i < DT1.Rows.Count; i++)
{
    fields[i] = new PivotGridField();
}

现在,每当您想要“字段 n”时,请使用fields[n]

于 2012-05-31T10:34:31.243 回答
3

你可以用不同的方式来做。首先,您可以使用 Marc 建议的数组。另一种方法是使用字典:

Dictionary<string,PivotGridField> fields = new Dictionary<string, PivotGridField>();
for (int i = 0; i < DT1.Rows.Count; i++)
{
    fields["field"+i] = new PivotGridField();
}

fields["field1"] = ...

第三种方法是使用ExpandoObject

dynamic fields = new ExpandoObject();
for (int i = 0; i < DT1.Rows.Count; i++)
{
    ((IDictionary<String, Object>) fields).Add("field" + i, new PivotGridField());
}

然后,您可以访问您的字段,就好像它们是真正的成员字段一样:

fields.field1 = ...
fields.field2 = ...
于 2012-05-31T10:58:23.730 回答
0

您可以在 C# 中动态创建字段/属性,但仅限于特定类型的对象。使用ExpandoObject,您可以这样做:

    ExpandoObject expando = new ExpandoObject();
    IDictionary<string, object> expandoAsDict = expando as IDictionary<string, object>;
    expando.Add("MyTotallyNewProperty", "MyTotallyNewPropertyValue");
    Console.WriteLine(expando.MyTotallyNewProperty); //this will print "MyTotallyNewPropertyValue"

您可以通过继承来自定义动态对象的性质DynamicObject在此处阅读此内容。

也就是说,在您的情况下,您应该改用其他建议。动态对象应该只在需要时使用,在你的情况下,动态数据结构会很好地完成这个技巧。请记住,仅仅因为“字段”一词出现在规范中,并不意味着您需要使用 C# 的字段概念来实现它。

注意:DynamicObject仅存在于 .NET 4.0 或更高版本中。在以前的版本中没有方便的方法来执行此操作。

于 2012-05-31T10:51:32.993 回答
0

不,在 C# 中,您不能动态生成变量的名称。

但是您可以设置各种字段属性的值:

for (int i = 0; i < DT1.Rows.Count; i++)
{
    PivotGridField field = new PivotGridField();
    field.Name = "Name " + i;
    grid.Fields.Add(field);
}
于 2012-05-31T10:34:12.593 回答
0

也许您可以改为创建一个 PivotGridField 类型的列表,并在每次迭代时添加到列表中。如果 PivotGridField 的属性之一类似于“名称”,则可以将其设置为“字段”+ i。

于 2012-05-31T10:36:18.280 回答