次の方法で共有


方法 : ラムダ式を作成する

更新 : 2007 年 11 月

ラムダ式は、単一の式を評価してその値を返す、名前を持たない関数です。

ラムダ式を作成するには

  1. メソッド内のデリゲート型を使用できる場所に、次の例に示すように、キーワード Function を入力します。

    Dim add1 = Function

  2. Function の直後に、関数のパラメータをかっこで囲んで入力します。Function の後ろに名前を指定しないことに注意してください。

    Dim add1 = Function (num As Integer)

  3. パラメータ リストの次に、関数の本体として、式を 1 つ入力します。この式の評価値が、この関数によって返される値になります。戻り値の型を指定するのに As 句は使用しません。

    Dim add1 = Function(num As Integer) num + 1
    

    ラムダ式は、整数の引数を渡すことによって呼び出します。

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. または、次の例のようにしても、同じ結果を得ることができます。

    Console.WriteLine((Function(num As Integer) num + 1)(5))
    

使用例

ラムダ式の一般的な使用目的は、Delegate 型のパラメータの引数として渡すことができる関数を定義することです。次の例では、GetProcesses メソッドが、ローカル コンピュータで実行中のプロセスの配列を返します。Enumerable クラスの Where メソッドは、引数として Boolean デリゲートを必要とします。この例では、その目的を果たすために、ラムダ式が送信されます。ラムダ式は、スレッドが 1 つだけあるプロセスで、filteredQuery で選択されたプロセスごとに、True を返します。

Sub Main()

    ' Create an array of running processes.
    Dim procList As Process() = Diagnostics.Process.GetProcesses

    ' Return the processes that have one thread. Notice that the type
    ' of the parameter does not have to be explicitly stated.
    Dim filteredList = procList.Where(Function(p) p.Threads.Count = 1)

    ' Display the name of each selected process.
    For Each proc In filteredList
        MsgBox(proc.ProcessName)
    Next

End Sub

前のコード例は、統合言語クエリ (LINQ: Language-Integrated Query) 構文で記述された次のコードに相当します。

Sub Main()

    Dim filteredQuery = From proc In Diagnostics.Process.GetProcesses _
                        Where proc.Threads.Count = 1 _
                        Select proc

    For Each proc In filteredQuery
        MsgBox(proc.ProcessName)
    Next
End Sub

参照

処理手順

方法 : Visual Basic でプロシージャを別のプロシージャに渡す

概念

デリゲートと AddressOf 演算子

ラムダ式

Visual Basic における LINQ の概要

参照

Function ステートメント (Visual Basic)

Delegate ステートメント

Enumerable