2012-01-23 16 views
4

C#配列には基本的に問題があります。私は初心者ですが、これはです。実際に基本的な問題です。今30分以上結んでいます。私はC#2010 Expressを使用しています。C#で配列を宣言して使用する方法

このコード: - :私はウェブサイトが、この同じエラーを報告し、私はなぜ見当もつかない教育のオフにコピー&ペースト

Array size cannot be specified in a variable declaration (try initializing with a 'new' expression)

であっても、基本的な配列の例

string[] motionCam = new string[8]; 
motionCam[1] = "Stop"; 

はエラーを報告します。

+4

それは私のために働く。また配列の最初の要素はインデックス0( 'monitorCam [0] =" Stop ";)です。配列の最後の要素はインデックス7になります。 – DaveShaw

+1

この特定のコードフラグメントには何も問題はありません。エラーはコード内の別の場所にあります。どのような特定の線は、このエラーを指摘しています – JaredPar

+6

そのコードは、メソッドの中にある場合、完全に正常に見えます。あなたは誤ってメソッドの外にそれを貼り付けましたか? 2番目の行は、メソッドの内部ではなく、クラス宣言の内部に記述するとこのエラーが発生する可能性があります。周囲のコードを投稿してください。 – CodesInChaos

答えて

5

貼り付けたコードは有効ですが、問題は別のものです。
多分あなたはクラスレベルでそれを宣言しました。

motionCam[1] = "Stop";は、宣言ではなく、コンパイラが叫ぶ理由です。

同じ問題があった人の質問thisを参照してください。

ボトムラインはクラスレベルで宣言しないでください。

+0

ありがとうございます。私はそれから作業することができます。皆さん、非常に迅速な対応を...私は絶えずこのフォーラムを読んでおり、それは素晴らしいことです。皆さん、ありがとうございました。 – Openstar63

+0

ありがとうございます。この答えは私を正しい道に導く最初のものでした。今修正されました。 – Openstar63

1

他にも言われているように、それ以上のことがあります。コード行です。 initializing with a 'new' expression一部だ

var motionCam = new string[] { "Zero", "Stop" /*[1]*/, "Two" }; 

:いずれの場合では、コンパイラは(あなたが望むものできない場合がある)を探している特定のもののようなものです。

1

は(多分クラスのコンストラクタのような)メソッドの内部で、この行を入れてみてください:

motionCam[1] = "Stop"; 

問題は、あなたが(結構です)配列を作成し、それを埋めるためにしようとしているということである(されていません)をクラス宣言の内側に配置します。

1

これはメソッド内に入っているコードです。クラスに直接入れると、エラーになります。

最初の行は有効な宣言なので、クラスの内部で直接問題ありません。
2行目は代入文であり、宣言ではありません。したがって、クラス内に直接ではなく、メソッド内にしか現れません。

このような方法にそれを置く:

static void MyMethod() 
{ 
    string[] motionCam = new string[8]; 
    motionCam[1] = "Stop"; 
} 

あなたはクラス内で直接このコードを入れた場合は、C#コンパイラが型としてmotionCam[1]を解釈します。 CまたはC++では、1の要素を持つmotionCam要素の配列になります。 C#では無効です。

5

あなたはクラスに入れています。 (2行目)

方法に入れてください。あなたがメソッド本体のクラス宣言ではなく、外のコード行を置くことができないと述べている

public partial class Form1 : Form 
{ 
    string[] motionCam = new string[8]; 
    public Form1() 
    { 
     InitializeComponent(); 
     motionCam[1] = "Stop"; 
    } 
} 
11

他の答えは正しいです。奇妙なエラーメッセージが出る理由を説明することは面白いかもしれないと思った。コンパイラは、X[Y] = Z;によって何を意味するかを理解しようと必死にしようとしている、そしてそれは何を意味するとしたことを前提としています

誤っ配列宣言で配列のサイズを置くこと、である
X[] F = Z; 

- 最近C#を学んだCプログラマーの間でよくあるエラーです。フィールドの名前は省略しています。

したがって、コンパイラは、配列のサイズが型宣言ではなく、イニシャライザに格納されていることを忘れているCプログラマである可能性が高いという最も有益なエラーが発生します。

この場合、推測は完全に間違っています。ここでのエラーは、誤ってステートメントを入力したところです。フィールド宣言が必要です。しかし、ほとんどの場合、合理的な推測です。

+1

質問はなぜコンパイラが推測するのですか?人間が一瞬で本当の問題を抱えることができれば、コンパイラもそうです。私が間違っている? – gdoron

+8

@gdoron:確かに、あなたがする必要があることは、人と同じくらいスマートなコンパイラを書くことだけです。また、キーストローク間の時間内に壊れたコードを正確に分析できる必要があります。 –

+0

あなたは雇いますか? – gdoron

関連する問題