C # enums и booleans - ищем более элегантный способ - PullRequest
3 голосов
/ 22 января 2009

У меня есть класс, который имеет свойство enum и логическое свойство, основываясь на том, что он вызывает определенный метод с конкретными параметрами. Я использую оператор switch для перечисления и if для логического значения в каждом случае переключателя. Это длинный список, и я не считаю его самым элегантным решением. У кого-нибудь есть более элегантный или простой способ реализовать это?

            switch (ReadDecision)
            {
                case ReadDecisions.ReadNext:
                    {
                        if (UseTimeout)
                        {
                            Message = queue.Receive(Timeout);
                        }
                        else
                        {
                            Message = queue.Receive();
                        }
                        break;
                    }
                case ReadDecisions.PeekNext:
                    {
                        if (UseTimeout)
                        {
                            Message = queue.Peek(Timeout);
                        }
                        else
                        {
                            Message = queue.Peek();
                        }
                        break;
                    }
                case ReadDecisions.ReadMessageId:
                    {
                        if (UseTimeout)
                        {
                            Message = queue.ReceiveById(Id, Timeout);
                        }
                        else
                        {
                            Message = queue.ReceiveById(Id);
                        }
                        break;
                    }
                case ReadDecisions.PeekMessageId:
                    {
                        if (UseTimeout)
                        {
                            Message = queue.PeekById(Id, Timeout);
                        }
                        else
                        {
                            Message = queue.PeekById(Id);
                        }
                        break;
                    }
                case ReadDecisions.ReadCorrelationId:
                    {
                        if (UseTimeout)
                        {
                            Message = queue.ReceiveByCorrelationId(Id, Timeout);
                        }
                        else
                        {
                            Message = queue.ReceiveByCorrelationId(Id);
                        }
                        break;
                    }
                case ReadDecisions.PeekCorrelationId:
                    {
                        if (UseTimeout)
                        {
                            Message = queue.PeekByCorrelationId(Id, Timeout);
                        }
                        else
                        {
                            Message = queue.PeekByCorrelationId(Id);
                        }
                        break;
                    }
                default:
                    {
                        throw new Exception("Unknown ReadDecisions provided");
                    }
            }

Ответы [ 11 ]

0 голосов
/ 22 января 2009

То, что у тебя есть, выглядит хорошо для меня. Это понятно, я чувствую себя уверенно, поддерживая его. В этом нет необходимости заниматься фантазией.

Например, использование причудливого шаблона, предложенного кем-то другим относительно использования классов вместо вашего enum, вероятно, приведет к созданию нового класса для каждого оператора case, и они, вероятно, войдут в файл, и вам потребуется еще один файл для базового интерфейса ... и это будет чертовски много всего. Я не знаю, как кто-то мог бы оправдать эту чертову кучу вещей как более простой способ выразить то, что вы уже сделали довольно хорошо.

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