Member 12658724 Ответов: 3

Могу ли я использовать общую передовую практику для этих методов?


Привет, у меня есть четыре метода, они довольно похожи.
private void MovePieceToUpperStation(Button currentButton, string rowId, string colId)
       {
           if (rowId == "8")
               return;
           var nextButtonName = ButtonNameNextToCurrentOneGetter.GetButtonNameOfTheUpperStation(colId, rowId);
           MovePieceToNextStation(currentButton, nextButtonName);
       }

       private void MovePieceToLowerStation(Button currentButton, string rowId, string colId)
       {
           if (rowId == "1")
               return;
           var nextButtonName = ButtonNameNextToCurrentOneGetter.GetButtonNameOfTheLowerStation(colId, rowId);
           MovePieceToNextStation(currentButton, nextButtonName);
       }

       private void MovePieceToRightStation(Button currentButton, string rowId, string colId)
       {
           if (colId == "H")
               return;
           var nextButtonName = ButtonNameNextToCurrentOneGetter.GetButtonNameOfTheRightStation(rowId, colId);
           MovePieceToNextStation(currentButton, nextButtonName);
       }

       private void MovePieceToLeftStation(Button currentButton, string rowId, string colId)
       {
           if (colId == "A")
               return;
           var nextButtonName = ButtonNameNextToCurrentOneGetter.GetButtonNameOfTheLeftStation(rowId, colId);
           MovePieceToNextStation(currentButton, nextButtonName);
       }


Мой вопрос в том, что я не хочу их повторять. Есть ли хороший способ сделать это?
Например, с помощью универсального.

Что я уже пробовал:

Может ли передать методу другой параметр?

3 Ответов

Рейтинг:
9

OriginalGriff

Не легко - они делают разные вещи, которые просто выглядят похожими.
Вам нужно будет передать три дополнительных параметра: "идентификатор сравнения" (либо rowId, либо ColId), "значение сравнения" ("8", "1", "H", или "A") и делегат для выполнения метода (GetButtonNameOfTheUpperStation, GetButtonNameOfTheLowerStation, GetButtonNameOfTheRightStation или GetButtonNameOfTheLeftStation)
А это означает, что каждый вызов должен знать детали того, что произойдет и почему, чтобы вызвать "общий" метод - это беспорядочно и подвержено ошибкам.

Я бы не стал этого делать.


Рейтинг:
2

jimmson

Привет,

здесь не так уж много упрощений.
В каждом из них вы вызываете другой метод. Это не то, с чем дженерик может вам помочь.


Рейтинг:
0

Dave Kreskowiak

Эти методы схожи только по структуре, но не по функциям. Проблема в том, что каждый метод имеет дело с разными данными и выполняет разный код в зависимости от различных условий, наложенных на эти данные.

Нет никакого способа сконденсировать этот код до одного метода каким-либо элегантным способом.