Kruczki odnośnie formatowania kodu

0

Jakbyście sformatowali ten kod? Podobie jak ja? Wydaje mi się nieczytelny ale nie mam innego pomysłu. Może zapisać najpierw wynik do DialogResult?

        private void askBeforeAdding(TrackMove move)
        {
            if (moveSequence[moveSequence.Count - 1].compare(move))
            {
                switch (MessageBox.Show(
                            "This frame is exactly as the one before, are you sure you want to add it?",
                            "Two exact frames",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Question))
                {
                    case System.Windows.Forms.DialogResult.No:
                        return;
                }
            }
            moveSequence.Add(move);
        }
0

Koniecznie zapisz ten wynik do czegoś, czego nie można zmieniać, ale ma swoją nazwę. Czyli w zasadzie tak jak wspomniałeś.

0
private void askBeforeAdding(TrackMove move){
    if(moveSequence[moveSequence.Count - 1].compare(move)){
        var DialogResult = MessageBox.Show(
            "This frame is exactly as the one before, are you sure you want to add it?",
            "Two exact frames",
            MessageBoxButtons.YesNo,
            MessageBoxIcon.Question)
        );
        if(DialogResult == System.Windows.Forms.DialogResult.No) return;
        moveSequence.Add(move);
    }
}

lub ewentualne odwrócenie warunku

private void askBeforeAdding(TrackMove move){
    if(!moveSequence[moveSequence.Count - 1].compare(move)) return;
    var DialogResult = MessageBox.Show(
        "This frame is exactly as the one before, are you sure you want to add it?",
        "Two exact frames",
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Question)
    );
    if(DialogResult == System.Windows.Forms.DialogResult.No) return;
    moveSequence.Add(move);
}
0

Po pierwsze wpakowałbym te literały do stałych, a po drugie wypierniczył ten switch; Kolejna rzecz to połączenie warunków (gdzie w drugim wykonywany jest MessageBox i sprawdzane jest czy zwrócił Yes) i wykonanie ostatniej linijki kodu tylko wtedy, gdy oba warunki będą spełnione;

Nie piszę w C#, więc nie będę kombinował z tym kodem, jednak moja modyfikacja pozwalałaby zamienić to (dla FPC):

procedure AskBeforeAdding(AMove: TTrackMove);
begin
  if MoveSequence[MoveSequence.Count - 1].Compare(AMove) then
  begin
    case MessageBox('This frame is exactly as the one before, are you sure you want to add it?',
                    'Two exact frames', MB_ICONQUESTION or MB_YESNO) of
      IDNO: Exit();
    end
  end;

  MoveSequence.Add(AMove);
end;

na to:

procedure AskBeforeAdding(AMove: TTrackMove);
const
  BOX_TEXT  = 'This frame is exactly as the one before, are you sure you want to add it?';
  BOX_TITLE = 'Two exact frames';
begin
  if (MoveSequence[MoveSequence.Count - 1].Compare(AMove)) and
     (MessageBox(BOX_TEXT, BOX_TITLE, MB_ICONQUESTION or MB_YESNO) = IDNO) then
    Exit();

  MoveSequence.Add(AMove);
end;
0
  1. Jedna linijka = jedna kropka;
  2. switch dla wielu możliwych warunków, nie dla jednego;
  3. unikaj return w środku metody;

A najlepiej to użyć kolekcji, która nie pozwala na wielokrotne dodawanie takiego samego obiektu.

0

Ok, może wyjaśnię. Mam tą listę

List<TrackMove> moveSequence;

Mają w niej być rzeczy (czasem mogą być te same kilka razy). I teraz chcę zrobić tak żeby dało się dodać kilka tych samych obiektów pod rząd, ale żeby program zapytał czy na pewno użytkownik chce to zrobić, tj
a) Jeżeli dodawany obiekt jest taki sam jak poprzedni:
a1) Zapytaj czy na pewno dodać?
Tak: dodaj
Nie: nie dodawaj
b) Dodaj bez pytania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1