Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Func<T, TResult> (Delegado)

Encapsula un método que tiene un parámetro y devuelve un valor del tipo especificado por el parámetro TResult.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

public delegate TResult Func<in T, out TResult>(
	T arg
)

Parámetros de tipo

in T

Tipo de parámetro del método que este delegado encapsula.

Este parámetro de tipo es contravariante. Es decir, puede usar el tipo especificado o cualquier tipo menos derivado. Para obtener más información sobre la covarianza y la contravarianza, vea Covarianza y contravarianza en genéricos.

out TResult

Tipo del valor devuelto del método que este delegado encapsula.

Este parámetro de tipo es covariante. Es decir, puede usar el tipo especificado o cualquier tipo que sea más derivado. Para obtener más información sobre la covarianza y la contravarianza, vea Covarianza y contravarianza en genéricos.

Parámetros

arg
Tipo: T
Parámetro del método que este delegado encapsula.

Valor devuelto

Tipo: TResult
Valor devuelto del método que este delegado encapsula.

Este delegado puede usarse para representar un método que puede pasarse como parámetro sin declarar explícitamente ningún delegado personalizado. El método encapsulado debe corresponder a la firma del método definida por el delegado. Esto significa que el método encapsulado debe tener un parámetro, el cual se le pasa por valor, y debe devolver un valor.

NotaNota

Para hacer referencia a un método que tiene un parámetro y devuelve void (o en Visual Basic, que se declara como Sub en lugar de Function), use en su lugar el delegado genérico Action<T>.

Al usar el delegado Func<T, TResult>, no es necesario definir explícitamente un delegado que encapsule un método con un solo parámetro. Por ejemplo, el código siguiente declara explícitamente un delegado denominado ConvertMethod y asigna una referencia al método UppercaseString a su instancia de delegado.


using System;

delegate string ConvertMethod(string inString);

public class DelegateExample
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      ConvertMethod convertMeth = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMeth(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}


En el ejemplo siguiente se simplifica este código creando instancias de un delegado Func<T, TResult>, en lugar de definir explícitamente un nuevo delegado y asignarle un método con nombre.


using System;

public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      Func<string, string> convertMethod = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}


También puede usar el delegado Func<T, TResult> con métodos anónimos en C#, como se muestra en el ejemplo siguiente. (Para obtener una introducción a los métodos anónimos, vea Métodos anónimos (Guía de programación de C#).)


using System;

public class Anonymous
{
   public static void Main()
   {
      Func<string, string> convert = delegate(string s)
         { return s.ToUpper();}; 

      string name = "Dakota";
      Console.WriteLine(convert(name));   
   }
}


También puede asignar una expresión lambda a un delegado Func<T, TResult>, como se muestra en el ejemplo siguiente. (Para obtener una introducción a las expresiones lambda, vea Lambda (expresiones) (Visual Basic) y Expresiones lambda (Guía de programación de C#).)


using System;

public class LambdaExpression
{
   public static void Main()
   {
      Func<string, string> convert = s => s.ToUpper();

      string name = "Dakota";
      Console.WriteLine(convert(name));   
   }
}


El tipo subyacente de una expresión lambda es uno de los delegados genéricos de Func. De esta forma, se puede pasar una expresión lambda como parámetro sin asignarla explícitamente a un delegado. En particular, como muchos métodos de los tipos del espacio de nombres System.Linq tienen parámetros Func<T, TResult>, se puede pasar una expresión lambda a estos métodos sin crear explícitamente instancias de un delegado Func<T, TResult>.

En el ejemplo de código siguiente se muestra cómo declarar y usar un delegado Func<T, TResult>. Este ejemplo declara una variable Func<T, TResult> y le asigna una expresión lambda que convierte los caracteres de una cadena en letras mayúsculas. El delegado que encapsula este método se pasa a continuación al método Enumerable.Select para cambiar las cadenas de una matriz de cadenas a letras mayúsculas.


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

static class Func
{
   static void Main(string[] args)
   {
      // Declare a Func variable and assign a lambda expression to the  
      // variable. The method takes a string and converts it to uppercase.
      Func<string, string> selector = str => str.ToUpper();

      // Create an array of strings.
      string[] words = { "orange", "apple", "Article", "elephant" };
      // Query the array and select strings according to the selector method.
      IEnumerable<String> aWords = words.Select(selector);

      // Output the results to the console.
      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}      
/*
This code example produces the following output:

   ORANGE
   APPLE
   ARTICLE
   ELEPHANT
*/


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft