1

MonoDevelopには、コンパイルする次のコードがあります。

int[] row = new int[indices.Count]{};

ただし、実行時に、次のようになります。

Matrix.cs(53,53):エラーCS0150:定数値が必要です(CS0150)(testMatrix)

このエラーの意味を理解しているので、配列のサイズを変更する必要があります。

int[] row = new int[indices.Count]{};
Array.Resize(ref row, rowWidth);

LinuxでMonoDevelopを使用しているので、これに対処する必要がありますか?.Net 3.5では、配列の幅を含む変数を使用して配列を初期化できると確信していました。誰かがこれが分離されていることを確認できますか?もしそうなら、私はバグをbugzillaに報告することができます。

4

4 に答える 4

13

配列作成構文とオブジェクト初期化構文を混在させることはできません。を削除し{ }ます。

あなたが書くとき:

int[] row = new int[indices.Count];

indices.Countデフォルト値に初期化されたサイズの新しい配列を作成しています。

あなたが書くとき:

int[] row = new int[] { 1, 2, 3, 4 };

配列を作成し、その内容を値[1,2,3,4]に初期化します。配列のサイズは、要素の数から推測されます。それは略記です:

int[] row = new int[4];
row[0] = 1;
row[1] = 2;
row[2] = 3;
row[3] = 4;

配列はまだ最初にデフォルトに初期化されています。この構文は、これらの余分な割り当てを自分で作成する手間を省くための省略形を提供するだけです。

于 2010-05-16T21:45:25.817 に答える
1

次のコードは、Windows / .NET/LINQPadで同じ理由でコンパイルに失敗します。

void Main()
{
    int[] row = new int[indices.Count]{};
    row[2] = 10;
    row.Dump();
}

// Define other methods and classes here
public class indices {
    public static int Count = 5;
}

ただし、宣言({})からオブジェクトの初期化を削除すると、機能します。

于 2010-05-16T21:43:44.197 に答える
1

C#では、空の配列を宣言する場合、構文は次のようになります。

int [] row = new int [indices.Count];

于 2010-05-16T21:49:58.783 に答える
0

使用する場合は、配列初期化構文を使用し、配列のサイズを指定するためです。

int[] arr = new int[5]{1,2,3,4,5};

配列のサイズは不要な情報です。コンパイラは、初期化リストからサイズを推測できます。他の人が言っているように、あなたは空の配列を作成します:

int[] arr = new int[5];

または、初期化リストを使用します。

int[] arr = {1,2,3,4,5};
于 2010-05-16T22:03:10.163 に答える