[C#] ラムダ式の利用 - シンプルなラムダ式の定義と利用

このページのタグ:[C#] [ラムダ式]
C# 3.0で追加されたラムダ式を利用したコードを紹介します。

プログラム1

UI

Windows Formアプリケーションで以下のUIを作成します。TextBoxとButtonを配置します。

コード

以下のコードを記述します。

FormMain.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SimpleLambdaExpressions
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Func<int, int, bool> func1 = (a, b) => a == b;

      textBox1.Text += func1(4, 3) +"\r\n";
      textBox1.Text += func1(2, 4) + "\r\n";
      textBox1.Text += func1(1, 1) + "\r\n";
      textBox1.Text += func1(-5, 8) + "\r\n";
      textBox1.Text += func1(9, 9) + "\r\n";
    }
  }
}

解説


Func<int, int, bool> func1 = (a, b) => a == b;
がラムダ式の定義部分です。引数を2つ持ち戻り値を返すデリゲートをラムダ式で定義します。今回は"Func<int, int, bool>"型で定義したため、intの引数2つを与え、戻り値がboolのデリゲートを定義しています。

(a, b) => a == b
がラムダ式になります。a,b 2つの引数を受け取りa,bを比較します。同じ値ならばtrueを返し、異なる値ならばfalseを返します。


textBox1.Text += func1(4, 3) +"\r\n";
がラムダ式で定義されたデリゲートを呼び出すコードです。一般的な関数やメソッドの呼び出しと同じ書式で記述できます。

Func<int, int, bool> func1
上記のデリゲートに関する説明はこちらのページを参照してください。

実行結果

プロジェクトを実行します。下図の画面が表示されます。


ボタンをクリックします。テキストボックスに結果が表示されます。



  textBox1.Text += func1(4, 3) +"\r\n";
  textBox1.Text += func1(2, 4) + "\r\n";
  textBox1.Text += func1(1, 1) + "\r\n";
  textBox1.Text += func1(-5, 8) + "\r\n";
  textBox1.Text += func1(9, 9) + "\r\n";
のコードのうち、2つの引数の値が同じもの(3番目と5番目)がTrueの結果になっています。

プログラム2

UI

下図のUIを作成します。使用するコントロールはButton3とTextBoxです。

コード

下記のコードを記述します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SimpleLambdaExpressions
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button3_Click(object sender, EventArgs e)
    {
      Func<int, int> func1 = (a) => a*a;

      textBox1.Text += func1(4) + "\r\n";
      textBox1.Text += func1(2) + "\r\n";
      textBox1.Text += func1(1) + "\r\n";
      textBox1.Text += func1(-5) + "\r\n";
      textBox1.Text += func1(9) + "\r\n";
    }
  }
}

解説

下記のコードでは、引数の2乗を返すデリゲートになっています。"{"を利用しない式形式の場合は演算の結果が戻り値になります。

  Func<int, int> func1 = (a) => a*a;

一方、複数行でラムダ式を記述する場合は、戻り値にreturn文が必要になります。
参考コード
ラムダ式の実装部を複数行で記述する場合は下図のコードになります。return文が必要になります。

    private void button3_Click(object sender, EventArgs e)
    {
      Func<int, int> func1 = (a) => 
      {
        int b = a*a;
        return b;
      };

      textBox1.Text += func1(4) + "\r\n";
      textBox1.Text += func1(2) + "\r\n";
      textBox1.Text += func1(1) + "\r\n";
      textBox1.Text += func1(-5) + "\r\n";
      textBox1.Text += func1(9) + "\r\n";
    }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


button3をクリックします。引数を2乗した数値がテキストボックスに表示されます。


登録日 :2013-06-24    最終更新日 :2017-04-19
このページのタグ:[C#] [ラムダ式]
Japanese
プライバシー    iPentecについて
iPentec all rights reserverd. (ISDC)