7

現在、次のコードがあります。

        DecisionVariable[] attributes = 
        {
            new DecisionVariable("Var1", 2),
            new DecisionVariable("Var2", 4),
            new DecisionVariable("Var3", 1),
            new DecisionVariable("Var4", 2),
            new DecisionVariable("Var5", 5),
        };

しかし、For ループを使用してそれらを作成したいと思います。

        DecisionVariable[] attributes = 
        {
            for (int i=0;i<49;i++)
            {
                new DecisionVariable ("Var" + i, iValues[i]);
            }
        };

2 番目のバージョンでは、C# から、"For" に無効な式が含まれていることがわかります。

どこかにタイプミスがありますか、それともコンストラクターで for ループを使用して、一般的に許可されていないようなものですか?

4

5 に答える 5

12

コレクション初期化子for内でループを使用することはできません。代わりに次のコードを使用してください。

DecisionVariable[] attributes = new DecisionVariable[49];
for (int i = 0; i < 49; i++)
    attributes[i] = new DecisionVariable ("Var" + i, iValues[i]);
于 2013-02-14T08:45:28.750 に答える
3

LINQ構文を使用してこれを行うことができます。

DecisionVariable[] attributes = 
                      Enumerable.
                      Range(0, 49).
                      Select(i => new DecisionVariable("Var" + i, iValues[i])).
                      ToArray();
于 2013-02-14T08:48:03.073 に答える
3
    DecisionVariable[] attributes = new DecisionVariable[49];  

    for (int i=0; i<49; i++)
    {
        attributes[i] = new DecisionVariable("Var" + i, iValues[i]);
    }

次を使用して実行することもできgenericsます。

   List<DecisionVariable> attributes = new List<DecisionVariable>();

    for (int i=0; i<49; i++)
    {
        attributes.Add(new DecisionVariable("Var" + i, iValues[i]));
    }
于 2013-02-14T08:46:04.793 に答える
1

Enumerable.Rangeメソッドを使用すると便利です。

DecisionVariable[] attributes = Enumerable
    .Range(0, 49)
    .Select(i => new DecisionVariable("Var" + i, iValues[i]))
    .ToArray();

iValues配列に必要な要素の数が同じである場合はattributes、次のコードを検討してください。

DecisionVariable[] decisionVariables = iValues
    .Select((value, index) => new DecisionVariable("Var" + index, value))
    .ToArray();
于 2013-02-14T08:49:21.640 に答える