質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

5106閲覧

クラスの中にあるstring配列を初期化する方法

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/04/12 09:38

編集2017/04/12 10:21

クラスの中にあるstring配列を初期化する方法がわかりません。
下記のとおり、プログラムを組みましたが、1)と2)の部分にエラーが発生します。
初期化が間違っているのでしょうか?又は、クラスの記述が間違っているのでしょうか?
ご回答宜しくお願いいたします。

C#

1public partial class Form1 : Form 2{ 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 private void Form1_Load(object sender, EventArgs e) 9 { 10 for( int i=0 ; i < mem_com.Length ; ++i) { 11 richTextBox1.Text += mem_com[i].aflag +" " ; 12 richTextBox1.Text += mem_com[i].aint +" " ; 13 richTextBox1.Text += mem_com[i].astr +" " ; 14 richTextBox1.Text += mem_com[i].astr_ar[2] +"\n" ; //A222とB222を出力して欲しい 15 } 16 } 17 18 public mem_class[] mem_com = new mem_class[] 19 { 20 new mem_class(false,123,"a111",ss0), // 1)ss0がエラーになります 21 new mem_class(true, 456,"b222",ss1) // 2)ss1がエラーになります 22 } ; 23 24 string[] ss0 = new string[] {"A000","A111","A222"} ; // 3) 25 string[] ss1 = new string[] {"B000","B111","B222","B333"} ; // 4) 26 27} 28 29public class mem_class 30{ 31 public bool aflag { get ; set ; } 32 public int aint { get ; set ; } 33 public string astr { get ; set ; } 34 public string[] astr_ar { get ; set ; } 35 36 public mem_class(bool cl_aflag,int cl_aint,string cl_astr,string[] cl_astr_ar) 37 { 38 this.aflag = cl_aflag; 39 this.aint = cl_aint; 40 this.astr = cl_astr; 41 this.astr_ar = cl_astr_ar ; 42 } 43}

環境
Windows7、Visual Studio 2015、C#

エラー
CS0236 フィールド初期化子は、静的でないフィールド、メソッド、またはプロパティ 'Form1.ss0' を参照できません

行った事
3) 4)の部分を下記のように変更しましたが、エラー解除なし。
string[] ss0 = {"A000","A111","A222"} ;
string[] ss1 = {"B000","B111","B222","B333"} ;

以上 ご存知の方、ご回答宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/04/12 10:09

コード部分を```で囲って字下げしてください。
guest

回答1

0

ベストアンサー

コンパイルエラーがある場合、何がわるいかはビルドすればエラーメッセージがでています。赤い波線にマウスを持って行ってもツールチップが表示されます。

いつも分かりやすいメッセージが出るとも限りませんが、可能な限りそれを読んで意味を把握するようにしましょう。

本件の場合は「フィールドの初期値にはstaticなフィールドじゃないのを指定してはいけません」というエラーが出ると思います。

ss0, ss1を(そうしていいなら)staticにすると解決できます。もしstaticにできないならコンストラクターの中で初期化するとか、何か別の方法を採る必要があります。

投稿2017/04/12 10:23

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/13 04:17

有難う御座います。解決しました。 エラーメッセージに静的変数に・・・と表示していました。 何故気づかなかったのでしょうか?????
KSwordOfHaste

2017/04/13 05:41

これは例えばJavaに慣れたプログラマーがC#を使う時「っう!」となる仕様の一つだと思います。できないということ前提に頭が働くようになるまでしばし時間がかかるのですw;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問