Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Func(Of T, TResult)-Delegat

 

Veröffentlicht: Oktober 2016

Kapselt eine Methode, die über einen Parameter verfügt und einen Wert des Typs zurückgibt, der durch den TResult-Parameter angegeben wird.

Informationen zum Durchsuchen des .NET Framework-Quellcodes für diesen Typ finden Sie unter der Reference Source.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

Public Delegate Function Func(Of In T, Out TResult) (
	arg As T
) As TResult

Parameter

arg
Type: T

Der Parameter der Methode, die dieser Delegat kapselt.

Rückgabewert

Type: TResult

Der Rückgabewert der Methode, die dieser Delegat kapselt.

Typparameter

InT

Der Typ des Parameters der Methode, die dieser Delegat kapselt.

OutTResult

Der Typ des Rückgabewerts der Methode, die dieser Delegat kapselt.

System_CAPS_noteHinweis

Die .NET Framework-Quellcodes für diesen Typ finden Sie unter der Reference Source. Sie können den Quellcode online Durchsuchen, Referenz für die Offlineanzeige herunterladen und schrittweise durchlaufen (inklusive Patches und Updates) während des Debuggens; see instructions.

Dieser Delegat können Sie eine Methode darstellen, die als Parameter übergeben werden kann, ohne explizit einen benutzerdefinierten Delegaten zu deklarieren. Die gekapselte Methode muss der Methodensignatur entsprechen, die von diesem Delegaten definiert ist. Dies bedeutet, dass die gekapselte Methode einen Parameter besitzen muss, der als Wert übergeben wird, und einen Wert zurück geben muss.

System_CAPS_noteHinweis

Auf eine Methode zu verweisen, die über einen Parameter verfügt und gibt void (oder in Visual Basic deklariert wird als eine Sub sondern als eine Function), die generische Action(Of T) stattdessen delegieren.

Bei Verwendung der Func<'T, 'TResult> Delegaten, Sie müssen nicht explizit einen Delegaten definieren, die eine Methode mit einem einzelnen Parameter kapselt. Der folgende Code deklariert z. B. explizit einen Delegaten, mit dem Namen ConvertMethod und weist einen Verweis auf die UppercaseString Methode, um eine Delegatinstanz.

' Declare a delegate to represent string conversion method
Delegate Function ConvertMethod(ByVal inString As String) As String

Module DelegateExample
   Public Sub Main()
      ' Instantiate delegate to reference UppercaseString method
      Dim convertMeth As ConvertMethod = AddressOf UppercaseString
      Dim name As String = "Dakota"
      ' Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMeth(name))
   End Sub

   Private Function UppercaseString(inputString As String) As String
      Return inputString.ToUpper()
   End Function
End Module

Im folgende Beispiel wird dieser Code vereinfacht, durch die Instanziierung der Func<'T, 'TResult> Delegaten explizit einen neuen Delegaten definieren und eine benannte Methode zuweisen.

Module GenericFunc
   Public Sub Main()
      ' Instantiate delegate to reference UppercaseString method
      Dim convertMethod As Func(Of String, String) = AddressOf UppercaseString
      Dim name As String = "Dakota"
      ' Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name))
   End Sub

   Private Function UppercaseString(inputString As String) As String
      Return inputString.ToUpper()
   End Function
End Module

Sie können auch die Func<'T, 'TResult> delegieren mit anonymen Methoden in C# geschrieben, wie im folgenden Beispiel veranschaulicht. (Eine Einführung für anonyme Methoden finden Sie unter Anonyme Methoden (C#-Programmierhandbuch).)

using System;

public class Anonymous
{
   public static void Main()
   {
      Func<string, string> convert = delegate(string s)
         { return s.ToUpper();}; 

      string name = "Dakota";
      Console.WriteLine(convert(name));   
   }
}

Sie können auch einen Lambda-Ausdruck zum Zuweisen einer Func<'T, 'TResult> zu delegieren, wie im folgenden Beispiel veranschaulicht. (Eine Einführung in Lambda-Ausdrücke finden Sie unter Lambda Expressions (Visual Basic) und Lambda-Ausdrücke (C#-Programmierhandbuch).)

Module LambdaExpression
   Public Sub Main()
      Dim convert As Func(Of String, String) = Function(s) s.ToUpper()

      Dim name As String = "Dakota"
      Console.WriteLine(convert(name))  
   End Sub
End Module

Der zugrunde liegende Typ eines Lambda-Ausdrucks ist eine der generischen Func Delegaten. Dadurch möglich, einen Lambda-Ausdruck als Parameter zu übergeben, ohne explizit einem Delegaten zuzuweisen. Insbesondere, da viele Methoden von Typen in der System.Linq Namespace haben Func<'T, 'TResult> Parameter können übergeben dieser Methoden einen Lambda-Ausdruck ohne explizit Instanziieren einer Func<'T, 'TResult> delegieren.

Im folgenden Beispiel wird veranschaulicht, wie deklarieren und Verwenden einer Func<'T, 'TResult> delegieren. Dieses Beispiel deklariert eine Func<'T, 'TResult> Variable und weist ihm einen Lambdaausdruck, der die Zeichen in einer Zeichenfolge in Großbuchstaben konvertiert. Der Delegat, der diese Methode kapselt wird anschließend zum Übergeben der Enumerable.Select(Of TSource, TResult) Methode, um die Zeichenfolgen in ein Array von Zeichenfolgen in Großschreibung ändern.

Imports System.Collections.Generic
Imports System.Linq

Module Func
   Public Sub Main()
      ' Declare a Func variable and assign a lambda expression to the  
      ' variable. The method takes a string and converts it to uppercase.
      Dim selector As Func(Of String, String) = Function(str) str.ToUpper()

      ' Create an array of strings.
      Dim words() As String = { "orange", "apple", "Article", "elephant" }
      ' Query the array and select strings according to the selector method.
      Dim aWords As IEnumerable(Of String) = words.Select(selector)

      ' Output the results to the console.
      For Each word As String In aWords
         Console.WriteLine(word)
      Next
   End Sub
End Module
' This code example produces the following output:
'           
'   ORANGE
'   APPLE
'   ARTICLE
'   ELEPHANT

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.5
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: