Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Func<T1, T2, T3, T4, TResult>-Delegat

Kapselt eine Methode, die über vier Parameter verfügt und einen Wert von dem Typ zurückgibt, der vom TResult-Parameter angegeben wird.

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

public delegate TResult Func<in T1, in T2, in T3, in T4, out TResult>(
	T1 arg1,
	T2 arg2,
	T3 arg3,
	T4 arg4
)

Typparameter

in T1

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

Dieser Typparameter ist Contravariant. Das heißt, Sie können entweder den angegebenen Typ oder einen weniger abgeleiteten Typ verwenden. Weitere Informationen zu Ko- und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generika.

in T2

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

in T3

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

in T4

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

out TResult

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

Dieser Typparameter ist Covariant. Das heißt, Sie können entweder den angegebenen Typ oder einen weiter abgeleiteten Typ verwenden. Weitere Informationen zu Ko- und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generika.

Parameter

arg1
Typ: T1
Der erste Parameter der Methode, die dieser Delegat kapselt.
arg2
Typ: T2
Der zweite Parameter der Methode, die dieser Delegat kapselt.
arg3
Typ: T3
Der dritte Parameter der Methode, die dieser Delegat kapselt.
arg4
Typ: T4
Der vierte Parameter der Methode, die dieser Delegat kapselt.

Rückgabewert

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

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 Methodensignatur entsprechen, die von diesem Delegaten definiert wird. Das bedeutet, dass die gekapselte Methode über vier Parameter verfügen muss, die jeweils als Wert übergeben werden. Außerdem muss ein Wert zurückgegeben werden.

HinweisHinweis

Um auf eine Methode zu verweisen, die über vier Parameter verfügt und void zurückgibt (oder die in Visual Basic nicht als Function, sondern als Sub deklariert wird), verwenden Sie stattdessen den generischen Action<T1, T2, T3, T4>-Delegaten.

Wenn Sie den Func<T1, T2, T3, T4, TResult>-Delegaten verwenden, müssen Sie nicht explizit einen Delegaten definieren, der eine Methode mit vier Parametern kapselt. Der folgende Code deklariert beispielsweise explizit einen generischen Delegaten mit dem Namen Searcher und weist der Delegatinstanz einen Verweis auf die IndexOf-Methode zu.


using System;

delegate int Searcher(string searchString, int start, int count, 
                         StringComparison type);

public class DelegateExample
{
   public static void Main()
   {
      string title = "The House of the Seven Gables";
      int position = 0;
      Searcher finder = title.IndexOf;
      do
      {
         int characters = title.Length - position;
         position = finder("the", position, characters, 
                         StringComparison.InvariantCultureIgnoreCase);
         if (position >= 0)
         {
            position++;
            Console.WriteLine("'The' found at position {0} in {1}.", 
                              position, title);
         }
      } while (position > 0);
   }
}


Im folgenden Beispiel wird dieser Code vereinfacht, indem der Func<T1, T2, T3, T4, TResult>-Delegat instanziiert wird und nicht, indem ein neuer Delegat explizit definiert und diesem eine benannte Methode zugewiesen wird.


using System;

public class DelegateExample
{
   public static void Main()
   {
      string title = "The House of the Seven Gables";
      int position = 0;
      Func<string, int, int, StringComparison, int> finder = title.IndexOf;
      do
      {
         int characters = title.Length - position;
         position = finder("the", position, characters, 
                         StringComparison.InvariantCultureIgnoreCase);
         if (position >= 0)
         {
            position++;
            Console.WriteLine("'The' found at position {0} in {1}.", 
                              position, title);
         }
      } while (position > 0);
   }
}


Sie können den Func<T1, T2, T3, T4, TResult>-Delegaten mit anonymen Methoden in C# verwenden, wie im folgenden Beispiel veranschaulicht wird. (Eine Einführung in anonyme Methoden finden Sie unter Anonyme Methoden (C#-Programmierhandbuch).)


using System;

public class DelegateExample
{
   public static void Main()
   {
      string title = "The House of the Seven Gables";
      int position = 0;
      Func<string, int, int, StringComparison, int> finder = 
           delegate(string s, int pos, int chars, StringComparison type) 
           { return title.IndexOf(s, pos, chars, type); };
      do
      {
         int characters = title.Length - position;
         position = finder("the", position, characters, 
                         StringComparison.InvariantCultureIgnoreCase);
         if (position >= 0)
         {
            position++;
            Console.WriteLine("'The' found at position {0} in {1}.", 
                              position, title);
         }
      } while (position > 0);
   }
}


Sie können einem Func<T1, T2, T3, T4, TResult>-Delegaten auch einen Lambda-Ausdruck zuweisen, wie im folgenden Beispiel veranschaulicht wird. (Eine Einführung in Lambda-Ausdrücke finden Sie unter Lambda-Ausdrücke (Visual Basic) und Lambda-Ausdrücke (C#-Programmierhandbuch).)


using System;

public class DelegateExample
{
   public static void Main()
   {
      string title = "The House of the Seven Gables";
      int position = 0;
      Func<string, int, int, StringComparison, int> finder = 
           (s, pos, chars, type) => title.IndexOf(s, pos, chars, type); 
      do
      {
         int characters = title.Length - position;
         position = finder("the", position, characters, 
                         StringComparison.InvariantCultureIgnoreCase);
         if (position >= 0)
         {
            position++;
            Console.WriteLine("'The' found at position {0} in {1}.", 
                              position, title);
         }
      } while (position > 0);
   }
}


Der zugrunde liegende Typ eines Lambda-Ausdrucks ist einer der generischen Func-Delegaten. Hierdurch können Sie einen Lambda-Ausdruck als Parameter übergeben, ohne ihn explizit einem Delegaten zuzuweisen. Da viele Methoden von Typen im System.Linq-Namespace über Func-Parameter verfügen, können Sie diese Methoden als Lambda-Ausdrücke übergeben, ohne explizit einen Func-Delegaten zu instanziieren.

Im folgenden Beispiel wird das Deklarieren und Verwenden eines Func<T1, T2, TResult>-Delegaten veranschaulicht. In diesem Beispiel wird eine Func<T1, T2, TResult>-Variable deklariert und dieser ein Lambda-Ausdruck zugewiesen, der einen String-Wert und einen Int32-Wert als Parameter annimmt. Der Lambda-Ausdruck gibt true zurück, wenn die Länge des String-Parameters gleich dem Wert des Int32-Parameters ist. Der Delegat, der diese Methode kapselt, wird anschließend in einer Abfrage zum Filtern von Zeichenfolgen in einem Array von Zeichenfolgen verwendet.


using System;
using System.Collections.Generic;
using System.Linq;

public class Func3Example
{
   public static void Main()
   {
      Func<String, int, bool> predicate = (str, index) => str.Length == index;

      String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
      IEnumerable<String> aWords = words.Where(predicate).Select(str => str);

      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2015 Microsoft