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


Szerelvény metaadatainak lekérdezése a Reflection (LINQ) használatával

A .NET tükröződési API-kkal megvizsgálhatja a metaadatokat egy .NET-szerelvényben, és létrehozhatja az adott szerelvényben található típusok, típustagok és paraméterek gyűjteményét. Mivel ezek a gyűjtemények támogatják az általános IEnumerable<T> felületet, a LINQ használatával lekérdezhetők.

Az alábbi példa bemutatja, hogyan használható a LINQ a megadott keresési feltételnek megfelelő metódusok adott metaadatainak lekérésére. Ebben az esetben a lekérdezés megkeresi az összes olyan metódus nevét a szerelvényben, amely számbavételi típusokat, például tömböket ad vissza.

Assembly assembly = Assembly.Load("System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e");
var pubTypesQuery = from type in assembly.GetTypes()
                    where type.IsPublic
                    from method in type.GetMethods()
                    where method.ReturnType.IsArray == true
                        || (method.ReturnType.GetInterface(
                            typeof(System.Collections.Generic.IEnumerable<>).FullName!) != null
                        && method.ReturnType.FullName != "System.String")
                    group method.ToString() by type.ToString();

foreach (var groupOfMethods in pubTypesQuery)
{
    Console.WriteLine($"Type: {groupOfMethods.Key}");
    foreach (var method in groupOfMethods)
    {
        Console.WriteLine($"  {method}");
    }
}

A példa a Assembly.GetTypes metódust használja a megadott szerelvény típusok tömbjének visszaadására. Az a , amelynél a szűrőt alkalmazzák, úgy, hogy csak a nyilvános típusok kerüljenek visszaadásra. Minden nyilvános típushoz egy alkérdést hoz létre a rendszer a Type.GetMethods hívásból visszaadott MethodInfo tömb használatával. Ezek az eredmények csak azokat a metódusokat szűrik, amelyek visszatérési típusa tömb, vagy más olyan típus, amely implementálja IEnumerable<T>. Végül ezek az eredmények a típusnév kulcsként való használatával vannak csoportosítva.