🔧 ラムダ式とメソッド名の使い分け:Select(n => 処理)を簡略記法で書く

以下に技術資料として、「Select(n => n * 2) をメソッドに置き換える方法」とその応用について詳しくまとめます。

✅ 概要

LINQ の Select メソッドは、あるデータを変換して新しい形にするときに使用します。

var doubled = numbers.Select(n => n * 2);

この n => n * 2 部分を、同じシグネチャのメソッド(int → int)に置き換えることで、以下のように書くことができます。

var doubled = numbers.Select(Double);

🧪 例:値を2倍にするメソッドを使う

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] numbers = { 1, 2, 3 };

        var doubled = numbers.Select(Double);  // ← メソッド名で渡す

        foreach (var n in doubled)
        {
            Console.WriteLine(n);  // 出力: 2, 4, 6
        }
    }

    static int Double(int n)
    {
        return n * 2;
    }
}

🧠 補足:Select が期待する型

public static IEnumerable<TResult> Select<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, TResult> selector
)

たとえば int[] に対して Select(n => n * 2) と書く場合、Func<int, int> のデリゲート型が要求されているので、int を受け取って int を返す Double(int n) メソッドを渡すことができます。


📚 応用例:文字列に変換する場合

string[] words = { "apple", "banana" };

// ラムダ式
var upper = words.Select(w => w.ToUpper());

// メソッド
var upper = words.Select(ToUpperCase);

static string ToUpperCase(string s)
{
    return s.ToUpper();
}

ここでは Select に Func<string, string> を渡しているため、ToUpperCase(string) を使えます。


🎓 どちらを使うべきか?

シーンおすすめ
単発・短い処理Select(n => n * 2)(ラムダ式)
処理が複雑/複数箇所で使うSelect(メソッド名)(再利用可能)

📝 まとめ

  • Select(n => …) の n => … は、同じシグネチャのメソッドで代用可能
  • C# の メソッドグループ変換 によって、簡潔かつ再利用しやすくなる
  • Where だけでなく Select, OrderBy, Any, All などでも利用可能

🔄 よくある例(メソッド化して使えるもの)

メソッド名シグネチャ使用例
IsEven(int)int → boolWhere(IsEven)
Double(int)int → intSelect(Double)
ToUpperCase(string)string → stringSelect(ToUpperCase)
ToLength(string)string → intSelect(ToLength)

訪問数 2 回, 今日の訪問数 1回

C#,ラムダ式

Posted by hidepon