英語で読む

次の方法で共有


Func<T,TResult> 代理人

定義

1 つのパラメーターを受け取って TResult パラメーターに指定された型の値を返すメソッドをカプセル化します。

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

型パラメーター

T

このデリゲートによってカプセル化されるメソッドのパラメーターの型。

この型パラメーターは反変です。 つまり、指定した型、または弱い派生型のいずれかを使用することができます。 共変性および反変性の詳細については、「ジェネリックの共変性と反変性」をご覧ください。
TResult

このデリゲートによってカプセル化されるメソッドの戻り値の型。

この型パラメーターは共変です。 つまり、指定した型、または強い派生型のいずれかを使用することができます。 共変性および反変性の詳細については、「ジェネリックの共変性と反変性」をご覧ください。

パラメーター

arg
T

このデリゲートによってカプセル化されるメソッドのパラメーター。

戻り値

TResult

このデリゲートによってカプセル化されるメソッドの戻り値。

次の例は、デリゲートを宣言して使用する方法を示して Func<T,TResult> います。 この例では、変数を宣言 Func<T,TResult> し、文字列内の文字を大文字に変換するラムダ式を割り当てます。 その後、このメソッドをカプセル化するデリゲートは、 Enumerable.Select 文字列の配列内の文字列を大文字に変更するためにメソッドに渡されます。

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

*/

注釈

このデリゲートを使用すると、カスタムデリゲートを明示的に宣言しなくてもパラメーターとして渡すことができるメソッドを表すことができます。 カプセル化されたメソッドは、このデリゲートで定義されているメソッドシグネチャに対応している必要があります。 つまり、カプセル化されたメソッドは、値によって渡される1つのパラメーターを持つ必要があり、値を返す必要があることを意味します。

注意

1つのパラメーターを持つメソッドを参照し、を返す void (または Visual Basic ではなくとして宣言されている Sub Function ) 場合は、代わりに汎用デリゲートを使用し Action<T> ます。

デリゲートを使用する場合 Func<T,TResult> 、1つのパラメーターを持つメソッドをカプセル化するデリゲートを明示的に定義する必要はありません。 たとえば、次のコードでは、という名前のデリゲートを明示的に宣言 ConvertMethod し、メソッドへの参照を UppercaseString そのデリゲートインスタンスに割り当てます。

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();
   }
}

次の例では、 Func<T,TResult> 新しいデリゲートを明示的に定義し、名前付きメソッドを割り当てるのではなく、デリゲートをインスタンス化することによって、このコードを簡略化します。

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

Func<T,TResult>次の例に示すように、C# では、匿名メソッドでデリゲートを使用することもできます。 (匿名メソッドの概要については、「 匿名メソッド」を参照してください)。

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

次の例に示すように、ラムダ式をデリゲートに割り当てることもでき Func<T,TResult> ます。 (ラムダ式の概要については、「ラムダ式 (VB)」、「ラムダ式 (C#) 」、および「ラムダ式 (F #)」を参照してください。)

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

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

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

ラムダ式の基になる型は、汎用デリゲートの1つです Func 。 これにより、ラムダ式をデリゲートに明示的に代入せずに、パラメーターとして渡すことができます。 特に、名前空間の型の多くのメソッドに System.Linq パラメーターがあるため Func<T,TResult> 、デリゲートを明示的にインスタンス化せずにこれらのメソッドをラムダ式に渡すことができ Func<T,TResult> ます。

拡張メソッド

GetMethodInfo(Delegate)

指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。

適用対象

製品 バージョン
.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
.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
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

こちらもご覧ください