C# Функция, которая принимает имя / тип базового класса в качестве параметра и возвращает имя всех его дочерних элементов. - PullRequest
0 голосов
/ 07 января 2020

Мне нужно написать функцию, которая принимает имя базового класса и возвращает имя всех его дочерних элементов в C#. как вы все знаете в пространстве имен, у нас есть несколько базовых классов, каждый из которых имеет своих детей. Назначение вышеуказанной функции (которая будет расположена в Сервисах) - получить имя базового класса от пользователя, а затем вернуть имя всех его дочерних элементов. (мы можем использовать результат при создании командного файла) Я предполагаю, что мне нужно использовать рефлексию и обобщения, но не знаю, как это сделать. Не могли бы вы помочь мне об этом.

Как будет выглядеть функция, если я передам имя базового класса в виде строки? и как это должно быть, если я передам имя базового класса как тип generi c?

Edition к вопросу после комментариев:

на основе страницы, предложенной в ответе I попробовал следующую функцию, но она вернула null как для детей, так и для blahKids

 private object GetKidsOfBaseClass(string baseClass)
    {
        Type baseType = Type.GetType($"{baseClass}");
        var blahKids = AppDomain.CurrentDomain.GetAssemblies().SelectMany(ass => ass.GetTypes())
            .Where(p => p.IsSubclassOf(baseType));
        var kids = Assembly.GetAssembly(baseType).GetTypes().Where(t => t.IsSubclassOf(baseType));
        return kids;
    }

Второе издание после предложения @madreflection: у меня работал следующий код:

    private object GetKidsOfBaseClass(Type baseType)
    {
        var blahKids = 
        AppDomain.CurrentDomain.GetAssemblies().SelectMany(ass => ass.GetTypes())
            .Where(p => p.IsSubclassOf(baseType)).ToList();

        return blahKids;
    }

1 Ответ

0 голосов
/ 07 января 2020

Вот решение на основе комментариев, добавленных в мой вопрос:

private object GetKidsOfBaseClass(Type baseType)
{
    var blahKids = 
    AppDomain.CurrentDomain.GetAssemblies().SelectMany(ass => ass.GetTypes())
        .Where(p => p.IsSubclassOf(baseType)).ToList();

    return blahKids;
}
...