使用英语阅读

通过


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>委托ConvertAll,第二个示例使用泛型类的 List<T> 方法演示委托ConvertAllArray

示例 1

下面的代码示例定义了一个名为 PointFToPoint 的方法,该方法将 PointF 结构转换为 Point 结构。 然后,该示例创建一个结构数组PointF,在 Visual Basic) Converter(Of PointF, Point) 中创建一个Converter<PointF, Point>委托 (来表示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 结构的 ,在 Visual Basic) Converter(Of PointF, Point) 中创建一个Converter\<PointF, Point>委托 (来表示 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}
 */

注解

类的 Array 方法和 类ConvertAllList<T> 方法使用此ConvertAll委托将集合的每个元素从一种类型转换为另一种类型。

扩展方法

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