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

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

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

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

Q&A

解決済

2回答

4338閲覧

C# クラスで構造体を宣言した際に 中身が”null"になってしまう

dekky0910

総合スコア93

C#

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

0グッド

0クリップ

投稿2017/02/20 11:25

コンソールアプリケーションで構造体を宣言し、それの実体も宣言し
構造体にデータを入力した際に構造体がnullになってしまい実行できません。

この場合の回避法はどうしたらよいのでしょうか?

説明べたですみません。

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7namespace ConsoleApplication10 8{ 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Data data = new Data(); 14 15 data.console(); 16 } 17 } 18 class Data 19 { 20 _Data[] _data; 21 public struct _Data 22 { 23 public string a; 24 public string b; 25 } 26 27 public void console() 28 { 29 _data[0].a = "hello"; 30 _data[0].b = "good"; 31 32 Console.WriteLine(_data[0].a + "\n" + _data[0].b); 33 } 34 } 35} 36 37実行結果 38追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません。のエラー表示 39エラー発生場所 40public void console()の中の 41 42_data[0].a="hello"; 43です。 44 45よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

_Data[] _data;
これでは_dataは_Dataの配列で使いますよって宣言しているだけで中身が作成されていません。
_Data[] _data = new _Data[20];
というようにX個の枠をnewしてやらないとダメです。

投稿2017/02/20 11:42

YAmaGNZ

総合スコア10242

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

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

0

new していないだけでは?_Data[]がnullだからぬるぽですよ。
初期データが入っていないのだから、添字アクセスもできませんよ。

スクリプト言語は、勝手にやってくれたりしますが、C#は違います。

投稿2017/02/20 11:37

編集2017/02/20 11:40
kiichi54321

総合スコア1984

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

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

dekky0910

2017/02/20 11:42 編集

new宣言もしたのですが結果は同じでした‥ newした後に中の初期化はやってなかったので試してみます。 ありがとうございます。
kiichi54321

2017/02/20 11:45

class Data { List<_Data> _data = new List<_Data>(); public struct _Data { public string a; public string b; } public void console() { _data.add( new _Data(){a = "hello",b="good"}); Console.WriteLine(_data[0].a + "\n" + _data[0].b); } } vsを通していないので、ミスがあるかもしれないけど、こんな感じで書く。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問