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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

解決済

foreachでのListでnullを回避する別の方法とは

P5_USER
P5_USER

総合スコア73

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

2回答

0評価

0クリップ

11649閲覧

投稿2018/01/10 10:17

編集2018/01/12 08:38

いつもお世話になっています。

以下の参考にしたものに書いてあります動画を元に写経をしてアレンジしました。
実行すると,foreachの行でエラーを吐かれてしまって右往左往の状態です。

何故,このような状態が起きているのでしょうか。
どのコードを変更あるいは追加するのが一番良いのでしょうか。

ちなみにSaveFile()はボタンクリックイベントで実行されるようになっています。

###参考にしたもの
C# Tutorial - Read & Write csv file | FoxLearn
写経元は以下のようになっています。
Studentクラスはデータグリッドビューのデータソースの選択から指定しています。

using CsvHelper; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ReadWriteCSV { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnWrite_Click(object sender, EventArgs e) { using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "CSV|*.csv", ValidateNames = true }) { if (sfd.ShowDialog()==DialogResult.OK) { using (var sw = new StreamWriter(sfd.FileName)) { var writer = new CsvWriter(sw); writer.WriteHeader(typeof(Student)); foreach(Student s in studentBindingSource.DataSource as List<Student>) { writer.WriteRecord(s); } } MessageBox.Show("Your data has been successfully saved.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } private void Form1_Load(object sender, EventArgs e) { studentBindingSource.DataSource = new List<Student>(); } private void btnRead_Click(object sender, EventArgs e) { using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "CSV|*.csv", ValidateNames = true }) { if (ofd.ShowDialog()==DialogResult.OK) { var sr = new StreamReader(new FileStream(ofd.FileName, FileMode.Open)); var csv = new CsvReader(sr); //studentBindingSource.DataSource = csv.GetRecord<Student>().ToString(); studentBindingSource.DataSource = csv.GetRecords<Student>(); } } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ReadWriteCSV { public class Student { public string StudentID { get; set; } public string StudentName { get; set; } public string Email { get; set; } public string Phone { get; set; } } }

###発生している問題・エラーメッセージ
foreachの行で発生。

System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。' (... as System.Collections.Generic.List<KMAP.AirPortDataClass>) が null を返しました。

イメージ説明
イメージ説明
イメージ説明
###該当のソースコード

C#

/// <summary> /// CSVのファイルパスを指定して保存する /// </summary> /// <param name="filePath">CSVのファイルパスを指定します</param> private void SaveFile(string filePath) { using (var sw = new StreamWriter(filePath, false, Encoding.GetEncoding("SHIFT-JIS"))) { var writer = new CsvWriter(sw); writer.WriteHeader(typeof(AirPortDataClass)); foreach (AirPortDataClass AirPortData in airPortDataClassBindingSource.DataSource as List<AirPortDataClass>) { writer.WriteRecord(AirPortData); } sw.Close(); } }

以下のクラスは,ソリューションファイル右クリック→追加→新しい項目で作成しました。

C#

public class AirPortDataClass { public string ICAO_Code { get; set; } public string Name { get; set; } public string Latitude { get; set; } public string Longitude { get; set; } public string Azimuth { get; set; } }

###補足情報(言語/FW/ツール等のバージョンなど)
言語はC#
開発環境はVisualStudio2017
.NET Framework Version 4.7.02556
です

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

ShikaTech

2018/01/10 10:28 編集

回答者に8分超えの動画を全部見ろってのは酷だとは思いませんか?参考にした動画の全コードを転記、あるいは要点を説明してください。エラー自体はairPortDataClassBindingSourceがNULL、つまりSaveFileメソッドとは別の処理で何かしらの初期化なり読み込みなりが行なわれている前提なのに、そのあたりの何かがバグってるってところですかね。
P5_USER

2018/01/10 11:03

配慮が足りませんでした。再編集にて転記しました。ボタンクリックイベントで発生するSaveFileメソッド以外には何も入れていないのですが...どこかで悪さをしているところを探すしかないですか

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。