この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Func<T, TResult> デリゲート

 

公開日: 2016年10月

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

この型の .NET Framework ソース コードを参照するを参照してください。、 Reference Sourceです。

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

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

パラメーター

arg
Type: T

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

戻り値

Type: TResult

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

型パラメーター

inT

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

outTResult

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

System_CAPS_noteメモ

この型の .NET Framework ソース コードを表示するを参照してください。、 Reference Sourceです。 ソース コードをオンラインで参照、オフラインで表示、リファレンスをダウンロードおよび; デバッグ中にソース (パッチや更新を含む) をステップsee instructions.

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

System_CAPS_noteメモ

1 つのパラメーターを返すメソッドを参照するvoid(として宣言されている Visual basic、または、Subではなく同様、 Function)、ジェネリックを使用してAction<T>代わりに委任します。

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

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>明示的に新しいデリゲートを定義して、名前付きメソッドをそこに割り当てるのではなくデリゲート。

using System;

public class GenericFunc
{
   public static void Main()
   {
      // 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));
   }

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

使用することも、Func<T, TResult>次の例に示すように、C# の場合は、匿名メソッドを持つデリゲートします。 (匿名メソッドの概要については、次を参照してください匿名メソッド (C# プログラミング ガイド)。)。

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

ラムダ式を割り当てることができます、Func<T, TResult>デリゲート、次の例に示すようにします。 (ラムダ式の概要については、次を参照してくださいLambda Expressions (Visual Basic)ラムダ式 (C# プログラミング ガイド)。)。

using System;

public class LambdaExpression
{
   public static void Main()
   {
      Func<string, string> convert = s => s.ToUpper();

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

ラムダ式の基になる型がジェネリックのいずれかのFuncデリゲート。 これによって、デリゲートを明示的に割り当てることがなく、ラムダ式をパラメーターとして渡します。 具体的には、ため内の型の多くのメソッド、System.Linq名前空間がFunc<T, TResult>パラメーターを渡すことができますこれらのメソッド、ラムダ式に明示的にインスタンス化しなくても、Func<T, TResult>を委任します。

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

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

static class Func
{
   static void Main(string[] args)
   {
      // 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
*/

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
3.5 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: