Converter<TInput,TOutput> Delegat

Definicja

Reprezentuje metodę, która konwertuje obiekt z jednego typu na inny typ.

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

Parametry typu

TInput

Typ obiektu, który ma zostać przekonwertowany.

Ten parametr typu jest kontrawariantny. Oznacza to, że możesz użyć typu, który został przez Ciebie określony, lub dowolnego typu, który jest mniej pochodny. Aby uzyskać więcej informacji o kowariancji i kontrawariancji, zobacz Kowariancja i kontrawariancja w typach ogólnych.
TOutput

Typ obiektu wejściowego ma zostać przekonwertowany na.

Ten parametr typu jest kowariantny. Oznacza to, że możesz użyć typu, który został przez Ciebie określony, lub dowolnego typu, który jest bardziej pochodny. Aby uzyskać więcej informacji o kowariancji i kontrawariancji, zobacz Kowariancja i kontrawariancja w typach ogólnych.

Parametry

input
TInput

Do obiektu do skonwertowania.

Wartość zwracana

TOutput

Element TOutput reprezentujący przekonwertowany TInputelement .

Przykłady

Ten rozdział zawiera dwa przykłady kodu. Pierwszy demonstruje delegata Converter<TInput,TOutput> przy ConvertAll użyciu metody Array klasy, a drugi demonstruje delegata ConvertAll przy użyciu metody List<T> klasy ogólnej.

Przykład 1

Poniższy przykład kodu definiuje metodę o nazwie PointFToPoint , która konwertuje PointF strukturę na Point strukturę. Następnie przykład tworzy tablicę PointF struktur, tworzy Converter<PointF, Point> delegata (Converter(Of PointF, Point)w Visual Basic) do reprezentowania PointFToPoint metody i przekazuje delegata do ConvertAll metody. Metoda ConvertAll przekazuje każdy element listy wejściowej do PointFToPoint metody i umieszcza przekonwertowane elementy na nową listę Point struktur. Zostaną wyświetlone obie listy.

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}
 */

Przykład 2

Poniższy przykład kodu definiuje metodę o nazwie PointFToPoint , która konwertuje PointF strukturę na Point strukturę. Następnie przykład tworzy List<T> PointF struktury, tworzy Converter\<PointF, Point> delegata (Converter(Of PointF, Point) w Visual Basic) do reprezentowania PointFToPoint metody i przekazuje delegata do ConvertAll metody. Metoda ConvertAll przekazuje każdy element listy wejściowej do PointFToPoint metody i umieszcza przekonwertowane elementy na nową listę Point struktur. Zostaną wyświetlone obie listy.

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}
 */

Uwagi

Ten delegat jest używany przez ConvertAll metodę klasy i ConvertAll metodę Array List<T> klasy, aby przekonwertować każdy element kolekcji z jednego typu na inny.

Metody rozszerzania

GetMethodInfo(Delegate)

Pobiera obiekt reprezentujący metodę reprezentowaną przez określonego delegata.

Dotyczy

Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.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
.NET Standard 2.0, 2.1