英語で読む

次の方法で共有


Converter<TInput,TOutput> 代理人

定義

特定の型のオブジェクトを別の型のオブジェクトに変換する方法を表します。

C#
public delegate TOutput Converter<in TInput,out TOutput>(TInput input);
C#
public delegate TOutput Converter<TInput,TOutput>(TInput input);

型パラメーター

TInput

変換するオブジェクトの型。

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

入力オブジェクトの変換後の型。

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

パラメーター

input
TInput

変換対象のオブジェクト。

戻り値

TOutput

変換された TOutput を表す TInput

このセクションには、2 つのコード例が含まれています。 1 つ目は、 クラスの Converter<TInput,TOutput> メソッドを ConvertAll 持つデリゲートを Array 示し、2 つ目はジェネリック クラスの メソッドを ConvertAll 持つデリゲートを List<T> 示しています。

例 1

次のコード例では、 構造体を 構造体に変換する という名前 PointFToPointPointF メソッドを Point 定義します。 次に、構造体のPointF配列を作成し、メソッドをConverter<PointF, Point>表すPointFToPointデリゲート (Converter(Of PointF, Point)Visual Basic では) を作成し、デリゲートを メソッドにConvertAll渡します。 メソッドは ConvertAll 、入力リストの各要素を メソッドに PointFToPoint 渡し、変換された要素を構造体の Point 新しいリストに配置します。 両方のリストが表示されます。

C#
using System;
using System.Drawing;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        // Create an array of PointF objects.
        PointF[] apf = {
            new PointF(27.8F, 32.62F),
            new PointF(99.3F, 147.273F),
            new PointF(7.5F, 1412.2F) };

        // Display each element in the PointF array.
        Console.WriteLine();
        foreach( PointF p in apf )
            Console.WriteLine(p);

        // Convert each PointF element to a Point object.
        Point[] ap = Array.ConvertAll(apf,
            new Converter<PointF, Point>(PointFToPoint));

        // Display each element in the Point array.
        Console.WriteLine();
        foreach( Point p in ap )
        {
            Console.WriteLine(p);
        }
    }

    public static Point PointFToPoint(PointF pf)
    {
        return new Point(((int) pf.X), ((int) pf.Y));
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */

例 2

次のコード例では、 構造体を 構造体に変換する という名前 PointFToPointPointF メソッドを Point 定義します。 次に、構造体の PointFList<T>作成し、メソッドをConverter\<PointF, Point>表すPointFToPointデリゲート (Converter(Of PointF, Point)Visual Basic では) を作成し、デリゲートを メソッドにConvertAll渡します。 メソッドは ConvertAll 、入力リストの各要素を メソッドに PointFToPoint 渡し、変換された要素を構造体の Point 新しいリストに配置します。 両方のリストが表示されます。

C#
using System;
using System.Drawing;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<PointF> lpf = new List<PointF>();

        lpf.Add(new PointF(27.8F, 32.62F));
        lpf.Add(new PointF(99.3F, 147.273F));
        lpf.Add(new PointF(7.5F, 1412.2F));

        Console.WriteLine();
        foreach( PointF p in lpf )
        {
            Console.WriteLine(p);
        }

        List<Point> lp = lpf.ConvertAll(
            new Converter<PointF, Point>(PointFToPoint));

        Console.WriteLine();
        foreach( Point p in lp )
        {
            Console.WriteLine(p);
        }
    }

    public static Point PointFToPoint(PointF pf)
    {
        return new Point(((int) pf.X), ((int) pf.Y));
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */

注釈

このデリゲートは、 クラスの Array メソッドと ConvertAll クラスの メソッドによってConvertAll使用され、コレクションのList<T>各要素をある型から別の型に変換します。

拡張メソッド

GetMethodInfo(Delegate)

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

適用対象

製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 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 2.0, 2.1