🔧 ラムダ式とメソッド名の使い分け: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 → bool | Where(IsEven) |
Double(int) | int → int | Select(Double) |
ToUpperCase(string) | string → string | Select(ToUpperCase) |
ToLength(string) | string → int | Select(ToLength) |
訪問数 2 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません