Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Delegado Func<T, TResult>

 

Publicado: octubre de 2016

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

Para examinar el código fuente de .NET Framework para este tipo, consulte el Reference Source.

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

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

Parámetros

arg
Type: T

Parámetro del método que este delegado encapsula.

Valor devuelto

Type: TResult

Valor devuelto del método que este delegado encapsula.

Parámetros de tipo

inT

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

outTResult

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

System_CAPS_noteNota

Para ver el código fuente de .NET Framework para este tipo, consulte el Reference Source. Puede examinar el código fuente en línea, descargar la referencia para visualizarlo sin conexión y paso a paso el código fuente (incluidas revisiones y actualizaciones) durante la depuración; see instructions.

Puede usar a este delegado para representar un método que puede pasarse como parámetro sin declarar explícitamente un delegado personalizado. El método encapsulado debe corresponder a la firma del método que está definida por el delegado. Esto significa que el método encapsulado debe tener un parámetro que se pasa por valor, y debe devolver un valor.

System_CAPS_noteNota

Hacer referencia a un método que tiene un parámetro y devuelve void (o en Visual Basic, que se declara como un Sub en lugar de como un Function), use la interfaz genérica Action<T> delegar en su lugar.

Cuando se usa el Func<T, TResult> delegado, no es necesario definir explícitamente un delegado que encapsula 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 a la UppercaseString método 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 la Func<T, TResult> delegado en lugar de definir un nuevo delegado y asignarle un método con nombre explícitamente.

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 Func<T, TResult> delegar 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, consulte 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 una Func<T, TResult> delegado, 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 la clase genérica Func delegados. Esto hace posible pasar una expresión lambda como parámetro sin asignarla explícitamente a un delegado. En particular, porque muchos métodos de tipos en el System.Linq tiene espacio de nombres Func<T, TResult> parámetros, puede pasar estos métodos de una expresión lambda sin crear explícitamente instancias de un Func<T, TResult> delegar.

En el ejemplo siguiente se muestra cómo declarar y usar un Func<T, TResult> delegar. Este ejemplo se declara un Func<T, TResult> variable y asigna una expresión lambda que convierte los caracteres de una cadena a mayúsculas. El delegado que encapsula este método se pasa a continuación el Enumerable.Select<TSource, TResult> método para cambiar las cadenas en una matriz de cadenas a 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
*/

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 3.5
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: