Прочитать на английском

Поделиться через


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.

Примеры

Этот раздел содержит два примера кода. Первый демонстрирует Converter<TInput,TOutput> делегат с методом ArrayConvertAll класса , а второй демонстрирует делегат с методом ConvertAll универсального List<T> класса.

Пример 1

В следующем примере кода определяется метод с именем PointFToPoint , который преобразует структуру PointF в структуру Point . Затем в примере создается массив PointF структур, создается Converter<PointF, Point> делегат (Converter(Of PointF, Point) в Visual Basic) для представления PointFToPoint метода и передается делегат методу 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

В следующем примере кода определяется метод с именем PointFToPoint , который преобразует структуру PointF в структуру Point . Затем в примере создается List<T>PointF структура , создается Converter\<PointF, Point> делегат (Converter(Of PointF, Point) в Visual Basic) для представления PointFToPoint метода и передается делегат методу 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}
 */

Комментарии

Этот делегат используется методом ConvertAllArray класса и 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