Domanda

Attualmente sto cercando di apprendere tutte le nuove funzionalità di C # 3.0. Ho trovato una collezione molto bella di esempio per esercitarmi in LINQ ma io non riesco a trovare qualcosa di simile per Lambda.

Hai un posto in cui posso esercitare la funzione Lambda?

Aggiornamento

LINQpad è ottimo per imparare Linq (grazie per chi suggerisce) e usare un po 'Lambda in qualche espressione. Ma sarei interessante in esercizi più specifici per Lambda.

È stato utile?

Soluzione

LINQPad è un buon strumento per l'apprendimento di LINQ

Altri suggerimenti

Le lambda sono solo qualcosa che, una volta che hai la testa in giro, " ottieni " esso. Se attualmente stai utilizzando un delegato, puoi sostituirlo con un lambda. Anche le aggiunte System.Action<...>, System.Func<...> e System.Predicate<...> sono delle belle scorciatoie. Alcuni esempi che mostrano la sintassi sarebbero utili (avviso: sono insensati ma volevo illustrare come è possibile scambiare le funzioni):

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 ciò che mi ha confuso era la sintassi del collegamento, ad esempio quando si utilizza System.Action per eseguire un delegato senza parametri che è possibile utilizzare:

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

Oppure potresti fare:

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

Quando hai un Action, Func o Predicate che accetta un argomento puoi omettere la parentesi:

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

o

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

anziché:

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

o per andare all'estremo:

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

Come mostrato sopra, i lambda a riga singola non richiedono l'istruzione return, anche se i lambda multilinea lo fanno.

Penso che troverai che il modo migliore per imparare a usare lambdas è lavorare molto con le raccolte e includere System.Linq negli spazi dei nomi usando - vedrai un sacco di metodi di estensione per le tue raccolte e la maggior parte di questi metodi ti permettono di esercitare la tua conoscenza di lambda.

Il migliore che ho trovato è questo link per il momento. È un quiz che ha incontrato la pratica, ma vorrei qualcosa di più Lambda e meno LINQ.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top