前提・実現したいこと
前回の質問では、質問がまとまっておらず、失礼しました。
参考にしているサイトを見ても、
やはりまだLINQのラムダ式の=>の右側の処理が何を書いているのかよくわからないという状態でした。
その原因は、LINQのどのメソッドでもラムダ式の=>の右側の処理に一律に同じことを書けばいいと思い込んでいたのが、
混乱の原因だったのかもしれません。
しかし実際は、LINQのメソッドによって、ラムダ式の=>の右側に書く処理は変わるということでしょうか?
つまり、「FirstOrDefaultやFindやWhereの場合は、=>の右側が1行の場合、=>の右側に要素を取得する為の条件式を書き、
Selectの場合は、=>の右側が1行の場合、=>の右側に取得する要素や、取得する加工した要素を書く」ということで合っていますか?
試したこと
自分なりに解釈したことを下記ソースのコメントに書きました。
合っているかご教示いただけませんか?
また、コメントの質問2についてご教示お願い致します。
C#
1 public partial class Form1 : Form 2 { 3 List<int> list = new List<int> { 1, 2, 3, 4, 5}; 4 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 10 private void Form1_Load(object sender, EventArgs e) 11 { 12 // 13 //FirstOrDefaultの場合、=>の右側が1行の場合、 14 //=>の右側に要素を取得する為の条件式を書く。 15 // 16 17 int i = list.FirstOrDefault(item => item % 2 == 0); 18 //FirstOrDefaultはSelectと違って、 19 //下記のように=>の右側に取得する要素や、取得する加工した要素を書くことはできない。 20 //int i2 = list.FirstOrDefault(item => item + 100); //エラー。 21 Console.WriteLine(i); //2 22 23 //FirstOrDefaultの書き換えは下記。 24 int i2 = 0; //OrDefaultのときは初期値を返す。 25 26 foreach (int item2 in list) 27 { 28 if(item2 % 2 == 0) 29 { 30 i2 = item2; 31 break; 32 } 33 } 34 35 Console.WriteLine(i2); //2 36 37 // 38 //FindやWhereも=>の右側が1行の場合、 39 //=>の右側に要素を取得する為の条件式を書く。 40 // 41 42 //FindはLinqのメソッドではなく、Listに用意されたメソッド。 43 //Findメソッドも先頭から検索して初めに見つかった要素を返す。 44 int i3 = list.Find(item => item % 2 == 0); 45 Console.WriteLine(i3); //2 46 47 //Whereメソッドは、FirstOrDefaultやFindと違って、 48 //取得する為の条件を満たした全ての要素を取得する。 49 IEnumerable<int> result = list.Where(item => item % 2 == 0); 50 51 52 // 53 //Selectの場合は、=>の右側が1行の場合、 54 //=>の右側に取得する要素や、取得する加工した要素を書く。 55 // 56 57 IEnumerable<int> result2 = list.Select(item => item + 100); 58 //Selectは、FirstOrDefault等と違って、 59 //下記のように=>の右側に要素を取得する為の条件式を書くことはできない。 60 //IEnumerable<int> result3 = list.Select(item => item % 2 == 0); //エラー。 61 foreach(int r in result2) 62 { 63 Console.WriteLine(r); 64 } 65 //101 66 //102 67 //103 68 //104 69 //105 70 71 72 // 73 //質問2:偶数のものだけ+100するという書き方はできませんか? 74 // 75 IEnumerable<int> result3 = list.Select(item => if (item % 2 == 0) { return item + 100}); 76 } 77 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/09 03:23
2018/09/09 10:26
退会済みユーザー
2018/09/09 10:32