Auf Englisch lesen

Freigeben über


Func<T,TResult> Delegat

Definition

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

C#
public delegate TResult Func<in T,out TResult>(T arg);
C#
public delegate TResult Func<T,TResult>(T arg);

Typparameter

T

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

Dieser Typparameter ist kontravariant. Das bedeutet, dass Sie entweder den angegebenen Typ oder einen weniger abgeleiteten Typ verwenden können. Weitere Informationen zu Kovarianz und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generics.
TResult

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

Dieser Typparameter ist kovariant. Das bedeutet, dass Sie entweder den angegebenen Typ oder einen stärker abgeleiteten Typ verwenden können. Weitere Informationen zu Kovarianz und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generics.

Parameter

arg
T

Der Parameter der Methode, die dieser Delegat kapselt.

Rückgabewert

TResult

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

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie sie einen Func<T,TResult> Delegaten deklarieren und verwenden. In diesem Beispiel wird eine Func<T,TResult> Variable deklariert und ihr ein Lambdaausdruck zugewiesen, der die Zeichen in einer Zeichenfolge in Großbuchstaben konvertiert. Der Delegat, der diese Methode kapselt, wird anschließend an die Enumerable.Select -Methode übergeben, um die Zeichenfolgen in einem Array von Zeichenfolgen in Großbuchstaben zu ändern.

C#
// Declare a Func variable and assign a lambda expression to the
// variable. The method takes a string and converts it to uppercase.
Func<string, string> selector = str => str.ToUpper();

// Create an array of strings.
string[] words = { "orange", "apple", "Article", "elephant" };
// Query the array and select strings according to the selector method.
IEnumerable<String> aWords = words.Select(selector);

// Output the results to the console.
foreach (String word in aWords)
    Console.WriteLine(word);

/*
This code example produces the following output:

ORANGE
APPLE
ARTICLE
ELEPHANT

*/

Hinweise

Sie können diesen Delegaten verwenden, um eine Methode darzustellen, die als Parameter übergeben werden kann, ohne explizit einen benutzerdefinierten Delegaten zu deklarieren. Die gekapselte Methode muss der von diesem Delegaten definierten Methodensignatur entsprechen. Dies bedeutet, dass die gekapselte Methode über einen Parameter verfügen muss, der als Wert an sie übergeben wird, und dass sie einen Wert zurückgeben muss.

Hinweis

Verwenden Sie stattdessen den generischen DelegatenAction<T>, um auf eine Methode zu verweisen, die über einen Parameter verfügt und zurückgibt void (oder in Visual Basic, das nicht Sub als als deklariert Functionist).

Wenn Sie den Func<T,TResult> Delegaten verwenden, müssen Sie nicht explizit einen Delegaten definieren, der eine Methode mit einem einzelnen Parameter kapselt. Der folgende Code deklariert beispielsweise explizit einen Delegaten namens ConvertMethod und weist der zugehörigen Delegateninstanz einen Verweis auf die UppercaseString -Methode zu.

C#
using System;

delegate string ConvertMethod(string inString);

public class DelegateExample
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      ConvertMethod convertMeth = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMeth(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

Im folgenden Beispiel wird dieser Code vereinfacht, indem der Func<T,TResult> Delegat instanziiert wird, anstatt explizit einen neuen Delegaten zu definieren und ihm eine benannte Methode zuzuweisen.

C#
// Instantiate delegate to reference UppercaseString method
Func<string, string> convertMethod = UppercaseString;
string name = "Dakota";
// Use delegate instance to call UppercaseString method
Console.WriteLine(convertMethod(name));

string UppercaseString(string inputString)
{
   return inputString.ToUpper();
}

// This code example produces the following output:
//
//    DAKOTA

Sie können den Func<T,TResult> Delegaten auch mit anonymen Methoden in C# verwenden, wie im folgenden Beispiel veranschaulicht. (Eine Einführung in anonyme Methoden finden Sie unter Anonyme Methoden.)

C#
 Func<string, string> convert = delegate(string s)
    { return s.ToUpper();};

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

// This code example produces the following output:
//
//    DAKOTA

Sie können einem Delegaten auch einen Func<T,TResult> Lambdaausdruck zuweisen, wie im folgenden Beispiel veranschaulicht. (Eine Einführung in Lambdaausdrücke finden Sie unter Lambdaausdrücke (VB),Lambdaausdrücke (C#) und Lambdaausdrücke (F#).)

C#
Func<string, string> convert = s => s.ToUpper();

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

// This code example produces the following output:
//
//    DAKOTA

Der zugrunde liegende Typ eines Lambdaausdrucks ist einer der generischen Func Delegaten. Dies ermöglicht es, einen Lambdaausdruck als Parameter zu übergeben, ohne ihn explizit einem Delegaten zuzuweisen. Da viele Methoden von Typen im System.Linq Namespace Über Parameter verfügen Func<T,TResult> , können Sie diesen Methoden einen Lambdaausdruck übergeben, ohne explizit einen Func<T,TResult> Delegaten zu instanziieren.

Erweiterungsmethoden

GetMethodInfo(Delegate)

Ruft ein Objekt ab, das die Methode darstellt, die vom angegebenen Delegaten dargestellt wird.

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Weitere Informationen