Оптимальный способ обработки текущих / предыдущих значений - PullRequest
0 голосов
/ 09 мая 2020

Я работаю над небольшим проектом в свободное время, но меня не устраивает то, как я обрабатываю текущие / предыдущие «значения» (в моем случае значения - это класс)

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

Итак, я пришел к этому:

public class PreviousCurrent<T> where T : class
{
   T current;

   public T Previous { get; set; }

   public T Current
   {
        get => current;
        set
        {
            if(value == current)
                return;

            if (Previous != null)
            {
                Previous = current;
                current = value;
            }
            else
                current = value;
        }
    }

    internal PreviousCurrent(T previous, T current)
    {
        Previous = previous;
        Current = current;
    }

    public static PreviousCurrent<T> Empty => new PreviousCurrent<T>(null, null); 
}

Это работает, но мне было интересно, есть ли более простой / элегантный способ справиться с такой ситуацией?

Любая конструктивная помощь / критика приветствуется!

Спасибо за советы!

1 Ответ

0 голосов
/ 09 мая 2020

обычным способом вам понадобится Momento узор. вы можете найти некоторую реализацию вроде этой

я думаю, вы должны позаботиться об этих деталях

  1. вам нужно хранить более одного состояния?
  2. он должен быть потокобезопасным? возможно, вам нужен ConcurrentStack или просто lock ()
  3. вы храните изменяемое состояние? возможно, вам нужна глубокая копия

в простом случае вы можете уменьшить его до класса с переменной, как в вашем коде

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