|
■No102598 (もか さん) に返信 > public partial class フォーム1 : Form > { > */A/*[] ary = new int[](0,1,2,3,4); > */B/* int[] ary2 = ary.OrderBy(i => Guid.NewGuid()).ToArray(); > } このような記述をする場合は、コンパイルが通る形を推奨します。 今回の場合は、/* A */ と書くなどですね。
> このようにしてみたのですがBのaryのところで「フィールド初期化子は、静的でないフィールド…’Form1’を参照できません」とエラーが出ます。 > また、Aはエラーが出ないのでそのままにし、BだけをForm1_Loadのところに移動させると、やはりローカル変数ですのでエラーが起こりました。 >>このようにしてみたのですがBのaryのところで「フィールド初期化子は、静的でないフィールド…’Form1’を参照できません」とエラーが出ます。 > なぜこのようなエラーが起こるのでしょうか。
変数には宣言と初期化があります。 A, B ともに変数の宣言と初期化の両方を同時に行っています。
メンバー変数の宣言と同時に初期化処理を書く場合かける内容が限られます。
そのような状況にならないようにコンストラクタで 初期化処理を書くようにします。
ですが、その場合初期化順を指定できないため、参照できないというエラーが出てしまいます。
ここでは回答例として記述しておきます、この場合は、以下のような形で記述します。 詳細については、言語としてのC#を学習してください。 いわゆる入門書などでも記載があると思います。
public partial class フォーム1 : Form { int[] ary; int[] ary2; public フォーム1() { InitializeComponent(); // 多分あるはず ary = new int[] { 0, 1, 2, 3, 4 }; ary2 = ary.OrderBy(i => Guid.NewGuid()).ToArray(); } }
|