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"] = ...
3番目の方法は使用すること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のプロパティの1つが「名前」のようなものである場合、それを「フィールド」+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
.NET4.0以降にのみ存在します。以前のバージョンでは、これを行う便利な方法はありません。