Отслеживание состояния переменной

161
29 октября 2021, 11:50

Нужно отслеживать состояние переменной. Пытался сделать такой код:

private static Dictionary<bool, bool> conditions = new Dictionary<bool, bool>();
public static bool Is(bool Is) {
    bool IsOld;
    if (!conditions.TryGetValue(Is, out IsOld)) {
        IsOld = false;
    }
    conditions[Is] = Is;
    if (Is && !IsOld) {
        return true;
    }
    return false;
}

Нужно чтобы этот метод работал единожды когда изменяется значение переменной.
Как такое сделать?
То есть была переменная true метод сказал true и после уже говорил false.
Стала переменная false метод глянул, сказал true и снова стал false.
Помогите разобраться, что я не так делаю?

Как это правильно сделать, для любой переменной, которую закидываем в Is(variable).

Что никто не знает как это сделать?

Answer 1

Вообщем, все банально и просто:

public static bool Is(bool Is, int key = 0) {
    if (conditions.ContainsKey(key)) {
        if (conditions[key] != Is) {
            conditions[key] = Is;
            return true;
        }
    } else {
        conditions[key] = Is;
        return true;
    }
    return false;
}

Остается лишь делать каждому новому вызову, новый ключ:

Is(var1);
Is(var2, 1);
........

Для прешедствующих версий нета, юзаем смело [CallerLineNumber] int Line = 0 или еще есть фишка nameof(var), сам нэймуф можем не использовать в прототипе, а прямо внутрях метода юзать, для вызова, даже без определения самого прототипа, прямо в теле метода определяем стрингу и вуаля:

 string IsName = nameof(Is);
READ ALSO
Создание маски и ограничение ввода символов в TextBox?

Создание маски и ограничение ввода символов в TextBox?

Возникла необходимость создать ограничение для ввода данных в textBox

129
C# пространства имен

C# пространства имен

Решение содержит следующую структуру:

79
C# WPF Интегрирование элементов в Xaml

C# WPF Интегрирование элементов в Xaml

Есть основное окно MainWindowxaml

147
Передаю команде Frame в WPF, но не работает

Передаю команде Frame в WPF, но не работает

Проблема в чем: мне нужно передать команде параметр в виде FrameFrame определён в коде XAML

98