Как кодировать большой, поддерживаемый, список времени компиляциигде элементы могут вызывать друг друга, - PullRequest
0 голосов
/ 14 мая 2018

Так, например, список, содержащий 5 Action<T> s A, B, C, D и E, где B вызывает A или C в некоторой точке в своем собственном «действии».

Очевидно, я мог бы сделатьчто-то вроде этого (пожалуйста, не отвлекайтесь на бесполезность этого примера):

    public static List<Action<string>> ActionList = new List<Action<string>>
    {
        inputString => //print reverse of string
        {
            Console.WriteLine(inputString.Reverse());
        },
        inputString => //print reverse of string if "Cat" otherwise print the string twice
        {
            if (inputString.Equals("Cat"))
            {
                ActionList[0](inputString);
            }
            else
            {
                ActionList[2](inputString);
            }
        },
        inputString => //print the string twice
        {
            Console.WriteLine(inputString);
            Console.WriteLine(inputString);
        },
        inputString => //print the string in uppercase
        {
            Console.WriteLine(inputString.ToUpper());
        },
        inputString => //print the string in lowercase
        {
            Console.WriteLine(inputString.ToLower());
        },
    };

Реальная вещь будет содержать сотни действий, каждое из которых будет гораздо более сложным, многие будут вызывать десятки других действий по-разному внутриоператоры switch и т. д.

Желательно, чтобы каждое действие было заключено в их собственный статический класс, чтобы я мог сохранить весь код, необходимый для работы этого действия, который я написал в этом классе, возможно, даже некоторыедополнительные свойства тоже.Но, конечно, это все еще боль, потому что мне все еще приходится жестко кодировать список и добавлять элементы каждый раз, когда я добавляю новое действие, и хотя я могу создать общий интерфейс для каждой реализуемой оболочки, я не могу сделать его статичным (я понимаю, почему интерфейсыне может быть статичным), несмотря на то, что когда-либо требуется только «статическое поведение», которое является немедленным красным флагом.

Кто-нибудь знает хороший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...