共用方式為


如何使用 Reflection 查詢元件的元資料(LINQ)

您可以使用 .NET 反映 API 來檢查 .NET 元件中的元數據,並建立該元件中的類型、類型成員和參數集合。 由於這些集合支援泛型 IEnumerable<T> 介面,因此可以使用 LINQ 進行查詢。

下列範例示範如何使用 LINQ 搭配反映來擷取符合指定搜尋準則之方法的特定元數據。 在此情況下,查詢會尋找元件中所有傳回可列舉型別(如陣列)的方法名稱。

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}");
    }
}

此範例會使用 Assembly.GetTypes 方法來傳回指定元件中的型別數位列。 應用 篩選條件的,僅返回公用類型。 針對每個公用類型,子查詢是使用從 Type.GetMethods 呼叫傳回的 MethodInfo 數位列來產生。 這些結果已被篩選,以僅傳回那些回傳型別為陣列或是實作 IEnumerable<T>的類型的方法。 最後,這些結果會使用類型名稱作為索引鍵來分組。