ラムダ式は、名前を持たない関数またはサブルーチンです。 ラムダ式は、デリゲート型が有効な場所であればどこでも使用できます。
1 行のラムダ式関数を作成するには
デリゲート型を使用できる状況では、次の例のようにキーワード
Function
を入力します。Dim add1 =
Function
かっこで囲み、
Function
の直後に、関数のパラメーターを入力します。Function
の後に名前を指定しないことに注意してください。Dim add1 = Function
(num As Integer)
パラメーター リストの後に、関数の本体として 1 つの式を入力します。 式が評価される値は、関数によって返される値です。 戻り値の型を指定するために
As
句を使用しません。Dim add1 = Function(num As Integer) num + 1
ラムダ式は、整数引数を渡して呼び出します。
' The following line prints 6. Console.WriteLine(add1(5))
または、次の例でも同じ結果が得られます。
Console.WriteLine((Function(num As Integer) num + 1)(5))
単一行ラムダ式サブルーチンを作成するには
デリゲート型を使用できる状況では、次の例に示すように、キーワード
Sub
を入力します。Dim add1 =
Sub
かっこで囲み、
Sub
の直後にサブルーチンのパラメーターを入力します。Sub
の後に名前を指定しないことに注意してください。Dim add1 = Sub
(msg As String)
パラメーター・リストの後に、サブルーチンの本体として単一のステートメントを入力します。
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
ラムダ式は、文字列引数を渡して呼び出します。
' The following line prints "Hello". writeMessage("Hello")
複数行ラムダ式関数を作成するには
デリゲート型を使用できる状況では、次の例に示すように、キーワード
Function
を入力します。Dim add1 =
Function
かっこで囲み、
Function
の直後に、関数のパラメーターを入力します。Function
の後に名前を指定しないことに注意してください。Dim add1 = Function
(index As Integer)
ENTER キーを押します。
End Function
ステートメントが自動的に追加されます。関数の本体内に、次のコードを追加して式を作成し、値を返します。 戻り値の型を指定するために
As
句を使用しません。Dim getSortColumn = Function(index As Integer) Select Case index Case 0 Return "FirstName" Case 1 Return "LastName" Case 2 Return "CompanyName" Case Else Return "LastName" End Select End Function
ラムダ式は、整数引数を渡して呼び出します。
Dim sortColumn = getSortColumn(0)
複数行ラムダ式サブルーチンを作成するには
デリゲート型を使用できる場合は、次の例に示すように、キーワード
Sub
を入力します。Dim add1 =
Sub
かっこで囲み、
Sub
の直後にサブルーチンのパラメーターを入力します。Sub
の後に名前を指定しないことに注意してください。Dim add1 = Sub
(msg As String)
ENTER キーを押します。
End Sub
ステートメントが自動的に追加されます。関数の本体内に、サブルーチンが呼び出されたときに実行する次のコードを追加します。
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End Sub
ラムダ式は、文字列引数を渡して呼び出します。
writeToLog("Application started.")
例
ラムダ式の一般的な用途は、型が Delegate
パラメーターの引数として渡すことができる関数を定義することです。 次の例では、 GetProcesses メソッドはローカル コンピューターで実行されているプロセスの配列を返します。
Enumerable クラスのWhere メソッドには、引数としてBoolean
デリゲートが必要です。 この例のラムダ式は、その目的で使用されます。 スレッドが 1 つだけのプロセスごとに True
が返され、 filteredList
で選択されます。
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
前の例は、Language-Integrated Query (LINQ) 構文で記述された次のコードと同じです。
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
こちらも参照ください
.NET