Actualización: noviembre 2007
Representa un método que convierte un tipo de objeto a otro tipo.
Espacio de nombres:
System
Ensamblado:
mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
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# admite el uso de APIs genéricas pero no admite la declaración de nuevas API.
JScript no admite el uso de métodos ni tipos genéricos.
Parámetros de tipo
- TInput
Tipo de objeto que se va a convertir.
- TOutput
Tipo al que se va a convertir el objeto de entrada.
Parámetros
- input
- Tipo: TInput
Objeto que se va a convertir.
Valor devuelto
Tipo: TOutput
TOutput que representa el TInput convertido.
El método ConvertAll<(Of <(TInput, TOutput>)>) de la clase Array y el método ConvertAll<(Of <(TOutput>)>) de la clase List<(Of <(T>)>) utilizan este delegado para convertir cada elemento de la colección de un tipo a otro.
Esta sección contiene dos ejemplos de código. En el primero se muestra el delegado Converter<(Of <(TInput, TOutput>)>) con el método ConvertAll<(Of <(TInput, TOutput>)>) de la clase Array, y en el segundo se muestra el delegado con el método ConvertAll<(Of <(TOutput>)>) de la clase genérica List<(Of <(T>)>).
Ejemplo 1
En el ejemplo de código siguiente se define un método denominado PointFToPoint que convierte una estructura PointF en una estructura Point. A continuación, en el ejemplo se crea una matriz de estructuras PointF, se crea un delegado Converter<PointF, Point> (Converter(Of PointF, Point) en Visual Basic) para representar al método PointFToPoint y se pasa el delegado al método ConvertAll<(Of <(TInput, TOutput>)>). El método ConvertAll<(Of <(TInput, TOutput>)>) pasa cada elemento de la lista de entrada al método PointFToPoint y coloca los elementos convertidos en una nueva lista de estructuras Point. Se muestran ambas listas.
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}
*/
#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()
{
array<PointF>^ apf = {
PointF(27.8F, 32.62F),
PointF(99.3F, 147.273F),
PointF(7.5F, 1412.2F) };
Console::WriteLine();
for each(PointF p in apf)
{
Console::WriteLine(p);
}
array<Point>^ ap =
Array::ConvertAll(apf,
gcnew Converter<PointF, Point>(PointFToPoint)
);
Console::WriteLine();
for each(Point p in ap)
{
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}
*/
Ejemplo 2
En el ejemplo de código siguiente se define un método denominado PointFToPoint que convierte una estructura PointF en una estructura Point. A continuación, en el ejemplo se crea un objeto List<(Of <(T>)>) de estructuras PointF, se crea un delegado Converter<PointF, Point> (Converter(Of PointF, Point) en Visual Basic) para representar al método PointFToPoint y se pasa el delegado al método ConvertAll<(Of <(TOutput>)>). El método ConvertAll<(Of <(TOutput>)>) pasa cada elemento de la lista de entrada al método PointFToPoint y coloca los elementos convertidos en una nueva lista de estructuras Point. Se muestran ambas listas.
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 Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
.NET Framework
Compatible con: 3.5, 3.0, 2.0
.NET Compact Framework
Compatible con: 3.5, 2.0
XNA Framework
Compatible con: 2.0, 1.0
Referencia