Aracılığıyla paylaş


Nasıl yapılır: sorgu (LINQ) yansıtma meta verilerini bir derlemenin

Aşağıdaki örnekte gösterildiği nasıl LINQ yansıtma ile belirli bir arama ölçütüyle eşleşen yöntemleri hakkında belirli meta veri almak için kullanılır.Bu durumda, sorgu tüm yöntemlerin adlarını sýralanabilir diziler gibi dönüş derleme bulabilirsiniz.

Örnek

Imports System.Reflection
Imports System.IO
Imports System.Linq
Module Module1

    Sub Main()
        Dim asmbly As Assembly = 
            Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089")

        Dim pubTypesQuery = From type In asmbly.GetTypes() 
                            Where type.IsPublic 
                            From method In type.GetMethods() 
                            Where method.ReturnType.IsArray = True 
                            Let name = method.ToString() 
                            Let typeName = type.ToString() 
                            Group name By typeName Into methodNames = Group


        Console.WriteLine("Getting ready to iterate")
        For Each item In pubTypesQuery
            Console.WriteLine(item.methodNames)

            For Each type In item.methodNames
                Console.WriteLine(" " & type)
            Next
        Next
        Console.ReadKey()
    End Sub

End Module
using System.Reflection;
using System.IO;
namespace LINQReflection
{
    class ReflectionHowTO
    {
        static void Main(string[] args)
        {
            Assembly assembly = Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089");
            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: {0}", groupOfMethods.Key);
                foreach (var method in groupOfMethods)
                {
                    Console.WriteLine("  {0}", method);
                }
            }

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
    }  
}

Bu örnek kullanır GetTypes içinde belirtilen birleştirme türleri dizisi dönmek için yöntem.Burada yalnızca ortak türleri döndürülür böylece filtre uygulanır.Her ortak türü için bir alt sorgu kullanılarak oluşturulan MethodInfo tarafından döndürülen dizi GetMethods çağırın.Bu sonuçları, dönüş türü olan uygulayan bir tür silinene veya bir dizi yöntemleri dönmek için filtre IEnumerable<T>.Son olarak, tür adı anahtar olarak kullanarak bu sonuçları gruplanır.

Kod Derleniyor

  • Oluşturma bir Visual Studio hedefleyen bir proje.net Framework sürüm 3.5.Projenin System.Core.dll referansı vardır ve bir using yönergesi (C#) veya Imports deyimi (Visual Basic) varsayılan olarak System.Linq ad.C# projeleri, ekleme bir using yönergesi System.IO ad alanı.

  • Projenize bu kodu kopyalayın.

  • Derlemek ve program çalıştırmak için F5 tuşuna basın.

  • Konsol penceresine çıkmak için herhangi bir tuşa basın.

Ayrıca bkz.

Kavramlar

LINQ nesnelere