注意:此委托在 .NET Framework 2.0 版中是新增的。
表示将对象从一种类型转换为另一种类型的方法。
命名空间:System
程序集:mscorlib(在 mscorlib.dll 中)
Public Delegate Function Converter(Of TInput, TOutput) ( _
input As TInput _
) As TOutput
Dim instance As New Converter(Of TInput, TOutput)(AddressOf HandlerMethod)
public delegate TOutput Converter<TInput,TOutput> (
TInput input
)
generic<typename TInput, typename TOutput>
public delegate TOutput Converter (
TInput input
)
J# 支持使用泛型类型和方法,但不支持进行新的声明。
类型参数
- TInput
要转换的对象的类型。
- TOutput
要将输入对象转换到的类型。
参数
- input
要转换的对象。
返回值
TOutput,它表示已转换的 TInput。
此委托由 Array 类的 ConvertAll 方法和 List 类的 ConvertAll 方法使用,将集合中的每个元素从一种类型转换为另一种类型。
本节包含两个代码示例。第一个示例演示 Converter 委托和 Array 类的 ConvertAll 方法;第二个示例演示该委托和 List 泛型类的 ConvertAll 方法。
示例 1
下面的代码示例定义一个名为 PointFToPoint 的方法,该方法可将 PointF 结构转换为 Point 结构。然后,该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托(在 Visual Basic 中为 Converter(Of PointF, Point))来表示 PointFToPoint 方法,并将该委托传递给 ConvertAll 方法。ConvertAll 方法将输入列表中的每个元素传递给 PointFToPoint 方法,并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。
Imports System
Imports System.Drawing
Imports System.Collections.Generic
Public Class Example
Public Shared Sub Main()
Dim apf() As PointF = { _
New PointF(27.8, 32.62), _
New PointF(99.3, 147.273), _
New PointF(7.5, 1412.2) }
Console.WriteLine()
For Each p As PointF In apf
Console.WriteLine(p)
Next
Dim ap() As Point = Array.ConvertAll(apf, _
New Converter(Of PointF, Point)(AddressOf PointFToPoint))
Console.WriteLine()
For Each p As Point In ap
Console.WriteLine(p)
Next
End Sub
Public Shared Function PointFToPoint(ByVal pf As PointF) _
As Point
Return New Point(CInt(pf.X), CInt(pf.Y))
End Function
End Class
' 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=28,Y=33}
'{X=99,Y=147}
'{X=8,Y=1412}
using System;
using System.Drawing;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
PointF[] apf = {
new PointF(27.8F, 32.62F),
new PointF(99.3F, 147.273F),
new PointF(7.5F, 1412.2F) };
Console.WriteLine();
foreach( PointF p in apf )
{
Console.WriteLine(p);
}
Point[] ap = Array.ConvertAll(apf,
new Converter<PointF, Point>(PointFToPoint));
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 结构。然后,该示例创建 PointF 结构的 List,创建一个 Converter<PointF, Point> 委托(在 Visual Basic 中为 Converter(Of PointF, Point))以表示 PointFToPoint 方法,并将该委托传递给 ConvertAll 方法。ConvertAll 方法将输入列表的各个元素传递给 PointFToPoint 方法,并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。
Imports System
Imports System.Drawing
Imports System.Collections.Generic
Public Class Example
Public Shared Sub Main()
Dim lpf As New List(Of PointF)
lpf.Add(New PointF(27.8, 32.62))
lpf.Add(New PointF(99.3, 147.273))
lpf.Add(New PointF(7.5, 1412.2))
Console.WriteLine()
For Each p As PointF In lpf
Console.WriteLine(p)
Next
Dim lp As List(Of Point) = lpf.ConvertAll( _
New Converter(Of PointF, Point)(AddressOf PointFToPoint))
Console.WriteLine()
For Each p As Point In lp
Console.WriteLine(p)
Next
End Sub
Public Shared Function PointFToPoint(ByVal pf As PointF) _
As Point
Return New Point(CInt(pf.X), CInt(pf.Y))
End Function
End Class
' 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=28,Y=33}
'{X=99,Y=147}
'{X=8,Y=1412}
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}
*/
#using <System.Drawing.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Collections::Generic;
Point PointFToPoint(PointF pf)
{
return Point((int) pf.X, (int) pf.Y);
};
void main()
{
List<PointF>^ lpf = gcnew List<PointF>();
lpf->Add(PointF(27.8F, 32.62F));
lpf->Add(PointF(99.3F, 147.273F));
lpf->Add(PointF(7.5F, 1412.2F));
Console::WriteLine();
for each(PointF p in lpf)
{
Console::WriteLine(p);
}
List<Point>^ lp =
lpf->ConvertAll<Point>(
gcnew Converter<PointF, Point>(PointFToPoint)
);
Console::WriteLine();
for each(Point p in lp)
{
Console::WriteLine(p);
}
}
/* 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}
*/
Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
.NET Framework
受以下版本支持:2.0
.NET Compact Framework
受以下版本支持:2.0