Func<T1,T2,T3,TResult> 대리자

정의

매개 변수가 세 개이고 TResult 매개 변수에 지정된 형식의 값을 반환하는 메서드를 캡슐화합니다.Encapsulates a method that has three parameters and returns a value of the type specified by the TResult parameter.

generic <typename T1, typename T2, typename T3, typename TResult>
public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3);
public delegate TResult Func<in T1,in T2,in T3,out TResult>(T1 arg1, T2 arg2, T3 arg3);
type Func<'T1, 'T2, 'T3, 'Result> = delegate of 'T1 * 'T2 * 'T3 -> 'Result
Public Delegate Function Func(Of In T1, In T2, In T3, Out TResult)(arg1 As T1, arg2 As T2, arg3 As T3) As TResult 

형식 매개 변수

T1

이 대리자로 캡슐화되는 메서드의 첫 번째 매개 변수 형식입니다.The type of the first parameter of the method that this delegate encapsulates.

T2

이 대리자로 캡슐화되는 메서드의 두 번째 매개 변수 형식입니다.The type of the second parameter of the method that this delegate encapsulates.

T3

이 대리자로 캡슐화되는 메서드의 세 번째 매개 변수 형식입니다.The type of the third parameter of the method that this delegate encapsulates.

TResult

이 대리자로 캡슐화되는 메서드의 반환 값 형식입니다.The type of the return value of the method that this delegate encapsulates.

매개 변수

arg1

이 대리자로 캡슐화되는 메서드의 첫 번째 매개 변수입니다.The first parameter of the method that this delegate encapsulates.

arg2

이 대리자로 캡슐화되는 메서드의 두 번째 매개 변수입니다.The second parameter of the method that this delegate encapsulates.

arg3

이 대리자로 캡슐화되는 메서드의 세 번째 매개 변수입니다.The third parameter of the method that this delegate encapsulates.

반환 값

TResult

이 대리자로 캡슐화되는 메서드의 반환 값입니다.The return value of the method that this delegate encapsulates.

상속
Func<T1,T2,T3,TResult>

예제

다음 예제에는 선언 및 사용 하는 방법을 보여 줍니다.는 Func<T1,T2,TResult> 위임 합니다.The following example demonstrates how to declare and use a Func<T1,T2,TResult> delegate. 이 예제에서는 선언를 Func<T1,T2,TResult> 변수는 람다 식을 할당 하 고는 String 값 및 Int32 매개 변수 값입니다.This example declares a Func<T1,T2,TResult> variable and assigns it a lambda expression that takes a String value and an Int32 value as parameters. 람다 식을 반환 true 경우의 길이 String 매개 변수는 값 같음는 Int32 매개 변수입니다.The lambda expression returns true if the length of the String parameter is equal to the value of the Int32 parameter. 이 메서드를 캡슐화 하는 대리자가 이후에 문자열 배열에 대 한 필터 문자열에 대 한 쿼리에 사용 됩니다.The delegate that encapsulates this method is subsequently used in a query to filter strings in an array of strings.

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);
   }
}
Imports System.Collections.Generic
Imports System.Linq

Public Module Func3Example

   Public Sub Main()
      Dim predicate As Func(Of String, Integer, Boolean) = Function(str, index) str.Length = index

      Dim words() As String = { "orange", "apple", "Article", "elephant", "star", "and" }
      Dim aWords As IEnumerable(Of String) = words.Where(predicate)

      For Each word As String In aWords
         Console.WriteLine(word)
      Next   
   End Sub
End Module

설명

사용자 지정 대리자를 명시적으로 선언 하지 않고 매개 변수로 전달할 수 있는 메서드를 나타내는이 대리자를 사용할 수 있습니다.You can use this delegate to represent a method that can be passed as a parameter without explicitly declaring a custom delegate. 캡슐화 된 메서드에이 대리자에 의해 정의 되는 메서드 시그니처와 일치 해야 합니다.The encapsulated method must correspond to the method signature that is defined by this delegate. 즉, 캡슐화 된 메서드에 값으로 전달 되는 세 가지 매개 변수를 있어야 하는 값을 반환 해야 합니다.This means that the encapsulated method must have three parameters, each of which is passed to it by value, and that it must return a value.

참고

3 개의 매개 변수가 반환 하는 메서드를 참조 void (Visual Basic의 경우로 선언 되는 Sub 아니라는 Function), 제네릭 사용 Action<T1,T2,T3> 대리자를 대신 합니다.To reference a method that has three parameters and returns void (or in Visual Basic, that is declared as a Sub rather than as a Function), use the generic Action<T1,T2,T3> delegate instead.

사용 하는 경우는 Func<T1,T2,T3,TResult> 대리자 필요가 없습니다를 명시적으로 세 개의 매개 변수를 사용 하 여 메서드를 캡슐화 하는 대리자를 정의 합니다.When you use the Func<T1,T2,T3,TResult> delegate, you do not have to explicitly define a delegate that encapsulates a method with three parameters. 예를 들어, 다음 코드는 라는 제네릭 대리자를 명시적으로 선언 ParseNumber 에 대 한 참조를 할당 합니다 Parse 해당 대리자 인스턴스에 메서드.For example, the following code explicitly declares a generic delegate named ParseNumber and assigns a reference to the Parse method to its delegate instance.

using System;
using System.Globalization;

delegate T ParseNumber<T>(string input, NumberStyles styles, 
                         IFormatProvider provider);
                         
public class DelegateExample
{
   public static void Main()
   {
      string numericString = "-1,234";
      ParseNumber<int> parser = int.Parse;
      Console.WriteLine(parser(numericString, 
                        NumberStyles.Integer | NumberStyles.AllowThousands, 
                        CultureInfo.InvariantCulture));
   }
}
Imports System.Globalization

Delegate Function ParseNumber(Of T)(input As String, styles As NumberStyles, _
                                    provider As IFormatProvider) As T

Module DelegateExample
   Public Sub Main()
      Dim numericString As String = "-1,234"
      Dim parser As ParseNumber(Of Integer) = AddressOf Integer.Parse
      Console.WriteLine(parser(numericString, _
                        NumberStyles.Integer Or NumberStyles.AllowThousands, _
                        CultureInfo.InvariantCulture))
   End Sub
End Module

다음 예제에서는 인스턴스화하여이 코드를 간소화는 Func<T1,T2,T3,TResult> 명시적으로 새 대리자를 정의 하 고 명명된 된 메서드를 할당 하는 대신 대리자입니다.The following example simplifies this code by instantiating the Func<T1,T2,T3,TResult> delegate instead of explicitly defining a new delegate and assigning a named method to it.

using System;
using System.Globalization;

public class GenericFunc
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser = int.Parse;
      Console.WriteLine(parser(numericString, 
                        NumberStyles.Integer | NumberStyles.AllowThousands, 
                        CultureInfo.InvariantCulture));
   }
}
Imports System.Globalization

Module GenericFunc
   Public Sub Main()
      Dim numericString As String = "-1,234"
      Dim parser As Func(Of String, NumberStyles, IFormatProvider, Integer) _
                         = AddressOf Integer.Parse
      Console.WriteLine(parser(numericString, _
                        NumberStyles.Integer Or NumberStyles.AllowThousands, _
                        CultureInfo.InvariantCulture))
   End Sub
End Module

사용할 수는 Func<T1,T2,T3,TResult> 다음 예제와 같이 C#에서는 무명 메서드로 위임 합니다.You can use the Func<T1,T2,T3,TResult> delegate with anonymous methods in C#, as the following example illustrates. (소개 무명 메서드를 참조 하세요 무명 메서드.)(For an introduction to anonymous methods, see Anonymous Methods.)

using System;
using System.Globalization;

public class Anonymous
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser = 
           delegate(string s, NumberStyles sty, IFormatProvider p) 
           { return int.Parse(s, sty, p); };
      Console.WriteLine(parser(numericString, 
                        NumberStyles.Integer | NumberStyles.AllowThousands, 
                        CultureInfo.InvariantCulture));
   }
}

람다 식을 할당할 수도 있습니다는 Func<T1,T2,T3,TResult> 다음 예제와 같이 대리자입니다.You can also assign a lambda expression to a Func<T1,T2,T3,TResult> delegate, as the following example illustrates. (람다 식에 대 한 소개를 참조 하세요 람다 식 하 고 람다 식.)(For an introduction to lambda expressions, see Lambda Expressions and Lambda Expressions.)

using System;
using System.Globalization;

public class LambdaExpression
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser = (s, sty, p)
                   => int.Parse(s, sty, p);
      Console.WriteLine(parser(numericString, 
                        NumberStyles.Integer | NumberStyles.AllowThousands, 
                        CultureInfo.InvariantCulture));
   }
}
Imports System.Globalization

Module LambdaExpression
   Public Sub Main()
      Dim numericString As String = "-1,234"
      Dim parser As Func(Of String, NumberStyles, IFormatProvider, Integer) _
                         = Function(s, sty, p) Integer.Parse(s, sty, p)
      Console.WriteLine(parser(numericString, _
                        NumberStyles.Integer Or NumberStyles.AllowThousands, _
                        CultureInfo.InvariantCulture))
   End Sub
End Module

람다 식의 기본 형식이 제네릭 중 하나인 Func 대리자입니다.The underlying type of a lambda expression is one of the generic Func delegates. 이 대리자를 명시적으로 할당 하지 않고 람다 식을 매개 변수로 전달할 수 있습니다.This makes it possible to pass a lambda expression as a parameter without explicitly assigning it to a delegate. 특히 때문에 형식의 여러 메서드를 System.Linq 네임 스페이스 Func 매개 변수를 하면 이러한 메서드는 람다 식을 전달할 수 명시적으로 인스턴스화하지 않고도 Func 위임 합니다.In particular, because many methods of types in the System.Linq namespace have Func parameters, you can pass these methods a lambda expression without explicitly instantiating a Func delegate.

확장 메서드

GetMethodInfo(Delegate)

지정된 대리자가 나타내는 메서드를 나타내는 개체를 가져옵니다.Gets an object that represents the method represented by the specified delegate.

적용 대상

추가 정보