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

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

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

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

2回答

2131閲覧

リストの要素の存在判定

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

0クリップ

投稿2018/07/24 04:28

前提・実現したいこと

リストの指定した要素番号の要素が存在するかどうかの判定はどのようにすればよいですか?
Countでチェックしてから、出力する方法ならば実装できましたが(試したことに記述)、
Countでチェックするのはあまりスマートなやり方じゃない気がします。
できれば、直接要素番号を指定して、その要素が存在するか?みたいな判定が可能ならばしたいです。

該当のソースコード

ElementAtOrDefaultならばデフォルト値を出してくれますが、
.FullNameのようにアクセスするとエラーになってしまいます。

C#

1 List<DirectoryInfo> list = new List<DirectoryInfo>(); 2 Console.WriteLine(list.ElementAtOrDefault(0)); //エラーにならない。 3 Console.WriteLine(list.ElementAtOrDefault(1).FullName); //エラーになる。 4 Console.WriteLine(list.ElementAtOrDefault(2).FullName); //エラーになる。

これを下記のような要素存在判定して出力する形にしたいです。

C#

1 List<DirectoryInfo> list = new List<DirectoryInfo>(); 2 if(0番目の要素存在判定) Console.WriteLine(list.ElementAt(0).FullName); 3 if(1番目の要素存在判定) Console.WriteLine(list.ElementAt(1).FullName); 4 if(2番目の要素存在判定) Console.WriteLine(list.ElementAt(2).FullName);

試したこと

下記のようにCountでチェックしてから、出力する方法ならば実装できましたが、
Countでチェックするのはあまりスマートなやり方じゃない気がします。
できれば、直接要素番号を指定して、その要素が存在するか?みたいな判定が可能ならばしたいです。

C#

1 List<DirectoryInfo> list = new List<DirectoryInfo>(); 2 if(list.Count > 0) Console.WriteLine(list.ElementAt(0).FullName); 3 if(list.Count > 1) Console.WriteLine(list.ElementAt(1).FullName); 4 if(list.Count > 2) Console.WriteLine(list.ElementAt(2).FullName);

List<T>.Exists メソッド (Predicate<T>)というものを見つけましたが、書き方が分からなく、
そもそもこれで目的のことができるかどうかもわかりません。

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

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

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

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

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

guest

回答2

0

全てをプリントするという話なら、

C#

1 foreach(var a in list){ 2 Console.WriteLine(a.FullName); 3 }

投稿2018/07/24 04:51

y_waiwai

総合スコア87774

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

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

退会済みユーザー

退会済みユーザー

2018/07/24 05:00

ご回答ありがとうございます。勉強になりました。
guest

0

ベストアンサー

なぜスマートじゃないのかわかりませんが、その前提なら Count で判定すればいいと思います。
if の代わりに switch を使いましょう。

投稿2018/07/24 04:49

Zuishin

総合スコア28660

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

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

Zuishin

2018/07/24 04:52 編集

「その前提なら」というのは、もう少し詳しいことがわかればまた別の方法も使えるかもしれないという意味です。要素番号による判定が妥当なのか、判定した後そのデータをどう扱うのかによります。 たとえば質問の例であれば 0 から 2 までの要素を順に出力するだけなので if も switch も不要です。
退会済みユーザー

退会済みユーザー

2018/07/24 05:00 編集

ご回答ありがとうございます。 質問が略式で失礼しました。 やりたいこととしては、リストがその時々で、空のときもあれば、0番目の要素だけ値が入っているときもあれば、1番目までの要素まで値が入っているときもあれば、2番目の要素まで値が入っているときもあって、0番目に要素があればテキストボックスAにその中身を出力、1番目に要素があればテキストボックスBにその中身を出力、2番目に要素があればテキストボックスCにその中身を出力といったことをやりたかったです。 Consoleと違い、テキストボックスA~Cに出力なのでforeachでは使えなさそうですね。 Countで判定したいと思います。
Zuishin

2018/07/24 05:02

テキストボックスのリストを作れば foreach が使えます。
退会済みユーザー

退会済みユーザー

2018/07/24 05:05

ご回答ありがとうございます。 勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問