Megosztás a következőn keresztül:


Példa lánclekérdezésekre (C#) (LINQ–XML)

Ez a példa a halasztott végrehajtási példában szereplő példára épül, és bemutatja, mi történik, ha két olyan lekérdezést láncolt össze, amelyek halasztott végrehajtást és lusta kiértékelést is használnak.

Példa: Második bővítménymetódus hozzáadása a yield return végrehajtás elhalasztásához

Ebben a példában egy másik bővítménymetódus jelenik meg, AppendStringamely hozzáfűz egy megadott sztringet a forrásgyűjtemény minden sztringéhez, majd a módosított sztringet adja eredményül.

public static class LocalExtensions
{
    public static IEnumerable<string>
      ConvertCollectionToUpperCase(this IEnumerable<string> source)
    {
        foreach (string str in source)
        {
            Console.WriteLine("ToUpper: source >{0}<", str);
            yield return str.ToUpper();
        }
    }

    public static IEnumerable<string>
      AppendString(this IEnumerable<string> source, string stringToAppend)
    {
        foreach (string str in source)
        {
            Console.WriteLine("AppendString: source >{0}<", str);
            yield return str + stringToAppend;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        string[] stringArray = { "abc", "def", "ghi" };

        IEnumerable<string> q1 =
            from s in stringArray.ConvertCollectionToUpperCase()
            select s;

        IEnumerable<string> q2 =
            from s in q1.AppendString("!!!")
            select s;

        foreach (string str in q2)
        {
            Console.WriteLine("Main: str >{0}<", str);
            Console.WriteLine();
        }
    }
}

Ez a példa a következő kimenetet hozza létre:

ToUpper: source >abc<
AppendString: source >ABC<
Main: str >ABC!!!<

ToUpper: source >def<
AppendString: source >DEF<
Main: str >DEF!!!<

ToUpper: source >ghi<
AppendString: source >GHI<
Main: str >GHI!!!<

Ebben a példában láthatja, hogy minden bővítménymetódus egyenként működik a forrásgyűjtemény minden eleménél.

Ebből a példából egyértelműnek kell lennie, hogy annak ellenére, hogy összeláncoltuk a gyűjteményeket eredményező lekérdezéseket, a köztes gyűjtemények nem lesznek materializálva. Ehelyett minden elem egy lusta metódusból a következőbe kerül. Ez sokkal kisebb memóriaigényt eredményez, mint egy olyan megközelítés, amely először egy sztringtömböt használna, majd létrehoz egy második sztringtömböt, amelyet nagybetűssé alakítottak át, és végül hozzon létre egy harmadik sztringtömböt, amelyben minden sztringhez hozzá vannak fűzve a felkiáltójelek.

Az oktatóanyag következő cikke a köztes materializálást mutatja be:

Lásd még