Pregunta

Actualmente estoy intentando aprender todas las funciones nuevas de C#3.0.He encontrado una colección muy bonita de muestra para practicar LINQ pero no encuentro algo similar para Lambda.

¿Tiene algún lugar donde pueda practicar la función Lambda?

Actualizar

LINQpad es genial para aprender Linq (gracias por el que sugiere) y usar un poco de Lambda en alguna expresión.Pero me interesaría hacer un ejercicio más específico para Lambda.

¿Fue útil?

Solución

LINQPad es una buena herramienta para aprender LINQ

Otros consejos

Las lambdas son algo que, una vez que entiendes, lo "entiendes".Si actualmente utiliza un delegado, puede reemplazarlo con una lambda.También el System.Action<...>, System.Func<...>, y System.Predicate<...> Las adiciones son buenos atajos.Sin embargo, serían útiles algunos ejemplos que muestren la sintaxis (advertencia:son tontos pero quería ilustrar cómo se pueden intercambiar funciones):

public static void Main()
{
    // ToString is shown below for clarification
    Func<int,string,string> intAndString = (x, y) => x.ToString() + y.ToString();
    Func<bool, float, string> boolAndFloat = (x, y) => x.ToString() + y.ToString();

    // with declared
    Combine(13, "dog", intAndString);
    Combine(true, 37.893f, boolAndFloat);

    // inline
    Combine("a string", " with another", (s1, s2) => s1 + s2);
    // and multiline - note inclusion of return
    Combine(new[] { 1, 2, 3 }, new[] { 6, 7, 8 },
        (arr1, arr2) =>
        {
            var ret = "";
            foreach (var i in arr1)
            {
                ret += i.ToString();
            }
            foreach (var n in arr2)
            {
                ret += n.ToString();
            }

            return ret;
        }
    );

    // addition
    PerformOperation(2, 2, (x, y) => 2 + 2);
    // sum, multi-line
    PerformOperation(new[] { 1, 2, 3 }, new[] { 12, 13, 14 },
        (arr1, arr2) =>
        {
            var ret = 0;
            foreach (var i in arr1)
                ret += i;
            foreach (var i in arr2)
                ret += i;
            return ret;
        }
    );

    Console.ReadLine();

}

public static void Combine<TOne, TTwo>(TOne one, TTwo two, Func<TOne, TTwo, string> vd)
{
    Console.WriteLine("Appended: " + vd(one, two));
}

public static void PerformOperation<T,TResult>(T one, T two, Func<T, T, TResult> func)
{
    Console.WriteLine("{0} operation {1} is {2}.", one, two, func(one,two));
}

Principalmente lo que me confundió fue la sintaxis del acceso directo, por ejemplo cuando uso System.Action para simplemente ejecutar un delegado sin parámetros que puedas usar:

var a = new Action(() => Console.WriteLine("Yay!"));

O podrías hacer:

Action a = () => Console.WriteLine("Yay");

Cuando tienes un Action, Func, o Predicate eso requiere un argumento, puedes omitir el paréntesis:

var f = new Func<int, bool>(anInt => anInt > 0);

o:

// note: no var here, explicit declaration
Func<int,bool> f = anInt => anInt > 0;

en lugar de:

Func<int,bool> f = (anInt) => anInt > 0;

o para ir al extremo:

Func<int,bool> f = (anInt) =>
{
    return anInt > 0;
}

Como se muestra arriba, las lambdas de una sola línea no requieren la declaración de devolución, aunque las de varias líneas Func las lambdas lo hacen.

Creo que encontrará que la mejor manera de aprender a usar lambdas es trabajar mucho con colecciones e incluir System.Linq en sus espacios de nombres de uso; verá un montón de métodos de extensión para sus colecciones y la mayoría de estos métodos le permitirán Ejercita tus conocimientos de lambdas.

Lo mejor que he encontrado es este enlace por el momento. Es un cuestionario que permite la práctica, pero me gustaría algo más Lambda y menos LINQ.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top