ID非公開

2021/4/5 23:55

33回答

【C#】CSVファイルから読み込んだ値を別のクラスで使用したい

C言語関連 | プログラミング25閲覧xmlns="http://www.w3.org/2000/svg">500

ベストアンサー

0

その他の回答(2件)

0

コンパイルエラーを無くすだけで良ければ values のインスタンスを生成して、fruit1, fruist2 のフィールドのアクセス修飾子に public を設定しましょう。 余談ですが、CsvReader に fruit1 というフィールドを定義することは、英語でいうと "CsvReader has fruit1"になり、日本語では"CsvReader は fruit1 を含んでいる"となります。しかし、csvを読み込むことが目的のクラスが fruit1 を含んでいるのは文章的にも役割的にもおかしい話ですから、分けた方が良いです。 まるで新聞に"明日の天気"というトピックがあり、いざ中身を読むと天気にまったく関係のない"芸能人のインタビュー"が書かれてある程の違和感があります。 > 実際に作成したいプログラムは以下のものとは少し異なるため、「わざわざクラスやファイルをわける必要はない」等のご指摘はご遠慮ください。 学習を始めて間もないのでしたら、特定の指摘を遠慮するようなことはしない方が良いと思います。

0

>> 実際に作成したいプログラムは以下のものとは少し異なるため、「わざわざクラスやファイルをわける必要はない」等のご指摘はご遠慮ください。 それを書いたら、「何も書けない」でしょ。 だって、書いても「それは求めていないので」と一蹴するでしょ? 意味不明。 それとサンプルコードと実際のコードが違うなら前提自体も違うからめちゃくちゃな回答になるよ? 簡略化したものだったらいいけど。 まあ、小言はこれぐらいにして。(一応) ---------------------------------- まず、CSVファイルには何が書かれていますか? 書式によっても違います。 たとえば 商品名 - 個数 - 消費期限 - 備考 で一つの行として複数行ある……なのか、 商品名1 - 商品名2 - 商品名 3 ... のようになっているのかとかでも違いますよ。 えーっと、ファイルから読み込む方法と分解する方法は知っているとします。(だってCSVファイルの定義が曖昧だからわかるわけない……) それで、「どのようにして返すか」ですね。 私ならクラスにします。いや、構造体でもいいか。 (C#にはあるし) (CSVの)構成がわからんから、あくまで例だけど、 商品名 - 個数 - 消費期限 - 備考 で一つの行だとしたら、 まず一行レベルで読んで、文字列分割。 そして構造体(あるいはクラス)のオブジェクトに格納して返す。 ただし、クラスの場合はアクセス修飾子を省くと「private扱い」だった気がします。 なので質問にあるコードはエラーが出る。 たとえばクラスだったら、 class Fruit{ ____private string name; ____private int num; // 個数 ____private string ComsumeByDate; // 消費期限 ____private string notes; // 備考 ____// ここでプロパティとか ____ ____// コンストラクタ ____public Fruit( string name, int num, string ComsumeByDate, string notes ){ /* 初期設定等*/ } ____// 他にもメソッドがあるとして } と言う風にする。 そうすれば、 CSVファイルから読み込んで文字列分割。 それで取得したデータを Fruit f = new Fruit( "バナナ", 5, "2021/4/7", "" ); のような状態で(実際には変数とかに入っているだろうけど)オブジェクトを生成してそれの配列を返せばいい。 上記はクラスでやっていますが、構造体でもいい。 とにかく一つのオブジェクトにまとめて、そのオブジェクト配列を返す。