循环创建动态名称
本文关键字:动态 创建 循环 | 更新日期: 2023-09-27 18:35:56
for (int i = 0; i < DT1.Rows.Count; i++)
{
PivotGridField field + i = new PivotGridField();
}
当然,这段代码不起作用,但如何让它以这种方式工作,因为我需要创建未知数量的字段。
谢谢!
您不能动态创建字段(或在本例中为变量)。你可以做的是有一个数组/列表/类似:
PivotGridField[] fields = new PivotGridField[DT1.Rows.Count];
for (int i = 0; i < DT1.Rows.Count; i++)
{
fields[i] = new PivotGridField();
}
现在,每当您想要"字段 n"时,请使用 fields[n]
你可以用不同的方式做到这一点。首先,您可以使用 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 = ...
不,在 C# 中,您无法动态生成变量的名称。
但是您可以设置各种字段属性的值:
for (int i = 0; i < DT1.Rows.Count; i++)
{
PivotGridField field = new PivotGridField();
field.Name = "Name " + i;
grid.Fields.Add(field);
}
也许您可以改为创建一个类型为 PivotGridField 的列表,并在每次迭代时添加到列表中。如果 PivotGridField 的属性之一是"name",则可以将其设置为 "field" + i。
您可以在 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 或更高版本中。在以前的版本中没有方便的方法可以执行此操作。