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

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

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

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

LINQ

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

Q&A

解決済

2回答

429閲覧

Linqのイメージについて。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

LINQ

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

0グッド

1クリップ

投稿2018/09/08 04:19

編集2018/09/08 08:14

前提・実現したいこと

今まで、Linqのラムダ式のイメージがよくわかってなかったのですが、
foreachに書き換えることができるならイメージが掴めると思いました。
この書き換えが合っているかどうかご教示いただけませんか?

該当のソースコード

C#

1 2 public partial class Form1 : Form 3 { 4 List<int> list = new List<int> { 1, 2, 3, 4, 5}; 5 6 private void Form1_Load(object sender, EventArgs e) 7 { 8 int i = list.FirstOrDefault(item => item % 2 == 0); 9 Console.WriteLine(i); //2 10 11 //Linqは下記のようなforeachのイメージ? 12 13 foreach (int item in list) 14 { 15 if(item % 2 == 0) 16 { 17 //FirstOrDefaultとかWhereとSumの組み合わせとか 18 //Linqメソッドにより、 19 //この中の処理は変わる。 20 } 21 } 22 }

質問。

・質問1
Linqのラムダ式の(item => item % 2 == 0)の=>の左側の引数itemは、
foreach文で言う所の、foreach (int item in list)のitemと同じと考えてよいですか?
つまり、コレクションの要素を指し示す変数名と考えてよいですか?

・質問2
(item => item % 2 == 0)は、(引数 => どのような引数(コレクションの要素)を抽出するかの条件)というイメージで合っていますか?
つまり、=>の右側の条件式は、foreach文で言う所のif(item % 2 == 0)のようなif文の中の条件式とイメージしてよいですか?

・質問3
LinqのFirstOrDefaultとかSumとかは、foreach文で言う所のif文の中の処理に該当するとイメージしてよいですか?

ご教示宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ラムダ式については次の記事がわかりやすいです。

C# 今更ですが、ラムダ式

ラムダ式は要するに無名のメソッドで、それを色々簡略化表記しているのだということです。

Sum() や FirstOrDefault() は Enumerable クラス で定義されて IEnumerable<T> に関連づけられている拡張メソッドです。

通常、メソッドはクラス定義により定まっています。新しいクラスを作成する時にしかメソッドを追加する事はできません。
またインターフェースではメソッドを定義する事はできますが、実装する事はできません。

拡張メソッドは、既存のクラスやインターフェースにあたかもメソッドを新しく実装したかのように振る舞うことのできる文法です。

###追記

質問に答えていませんでした。

質問 1
foreach に当てはめると役割は同じですが、正確には仮引数です。
foreach はループ変数なので微妙に違います。

質問 2
FirstOrDefault() の引数としてラムダ式を渡しています。
foreach に当てはめると役割は同じですが、条件に合う最初の要素を返すメソッドへの指示です。

質問 3
この場合ではそうなります。
ループが中へ中へと続くのに対し、LINQ は後へ後へと続きます。

投稿2018/09/08 04:46

編集2018/09/08 04:56
Zuishin

総合スコア28660

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

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

退会済みユーザー

退会済みユーザー

2018/09/08 06:44 編集

ご回答ありがとうございます。 2点確認させていただけませんか? 質問1について: イメージ的に役割としては同じと考えてよいのですね。 仮引数を知らなかったので調べてみたのですが、 下記のように、「仮引数とは、 実引数がメソッドの呼び出しで渡す引数なのに対し、 仮引数メソッドは呼び出されたときに受け取る引数」 ということで合っていますか? //メソッドの呼び出しで渡す引数が実引数。 //50と100が実引数。 sum(50,100); //メソッドが呼び出されたときに受け取る引数が仮引数。 //min,maxが仮引数。 int sum(int min,int max){ } 質問2について: イメージ的に役割としては同じと考えてよいのですね。 「=>の右側は、returnが省略されていて、Linqのメソッドに要素を返すための条件式」という言い方で 合っていますか? 今回、LinqのメソッドがFirstOrDefault()なので、その最初の要素を取得するということになっていると思いますが。 すみません、上記修正します。 =>の右側は、Linqのメソッドによって、Linqのメソッドに要素を返す為の、 条件式だったり、処理だったりと変わりますか? 「FirstOrDefault()の場合は、=>の右側は、returnが省略されていて、Linqのメソッドに要素を返すための条件式」という言い方で 「Select()の場合は、=>の右側は、returnが省略されていて、Linqのメソッドに要素を返すための処理」という言い方で合っていますか?
Zuishin

2018/09/08 06:43

無理やり自分のイメージに当てはめるよりリンク先を読んで正確なイメージをつかんでください。
退会済みユーザー

退会済みユーザー

2018/09/08 07:57

ご回答ありがとうございます。 質問の仕方が悪かったです。 リンク先を読んでもまだ分からないことがあるので、自分で何がわかっていないのか、明確に考えをまとめて改めて質問させていただきます。
guest

0

投稿2018/09/08 07:22

kiichi54321

総合スコア1984

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問