C# 在循环中创建动态名称 for(int i=0;i

C# 在循环中创建动态名称 for(int i=0;i,c#,asp.net,.net,C#,Asp.net,.net,当然,这段代码不起作用,但如何让它以这种方式工作,因为我需要创建未知数量的字段 谢谢 不,在C#中,不能动态生成变量名 但您可以设置各种字段属性的值: for (int i = 0; i < DT1.Rows.Count; i++) { PivotGridField field + i = new PivotGridField(); } for(int i=0;i

当然,这段代码不起作用,但如何让它以这种方式工作,因为我需要创建未知数量的字段

谢谢

不,在C#中,不能动态生成变量名

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

for (int i = 0; i < DT1.Rows.Count; i++)
{
    PivotGridField field + i = new PivotGridField();
}
for(int i=0;i
您不能动态创建字段(或在本例中创建变量)。您可以做的是创建一个数组/列表/类似:

for (int i = 0; i < DT1.Rows.Count; i++)
{
    PivotGridField field = new PivotGridField();
    field.Name = "Name " + i;
    grid.Fields.Add(field);
}
PivotGridField[]fields=新的PivotGridField[DT1.Rows.Count];
for(int i=0;i

现在,无论何时需要“字段n”,请使用
字段[n]

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

您可以在C#中动态创建字段/属性,但只能为特定种类的对象创建字段/属性。使用,您可以执行以下操作:

PivotGridField[] fields = new PivotGridField[DT1.Rows.Count];
for (int i = 0; i < DT1.Rows.Count; i++)
{
    fields[i] = new PivotGridField();
}
ExpandoObject expando=新的ExpandoObject();
IDictionary expandoAsDict=expando作为IDictionary;
expando.Add(“MyTotalyNewProperty”、“MyTotalyNewPropertyValue”);
Console.WriteLine(expando.MyTotalyNewProperty)//这将打印“MyTotalyNewPropertyValue”
通过继承
DynamicObject
,可以自定义动态对象的性质。仔细阅读这篇文章

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


注意:
DynamicObject
仅存在于.NET 4.0或更高版本中。在以前的版本中,没有方便的方法来实现这一点。

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

    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"
然后,您可以像访问真实成员字段一样访问字段:

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

我想为datatable中的每一行创建字段,而datatable并没有固定的行数。我需要为它们指定不同的名称。自动生成列对您有帮助吗?或者使用Key、Vaule字典数组,这样Key就是数据库列值之一
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 = ...