Создание предохранителя с логическим значением

У меня есть много фрагментов кода, которые нужно запустить один разво время инициализации.

Я должен использовать логический флаг таким образом, потому что он находится в событии

bool _fuse;

void PerformLayout()
{
    Size size;

    if (!_fuse)
    {
        size = _InitialContainerSize;
        _fuse = true;
    }
    else
        size = parent.Size;

    // ...
}

Поскольку это происходит часто, я сделал кое-что, чтобы эта логическая переменная выглядела как предохранитель:

Итак Я сделал следующее:

bool _fuse;

void PerformLayout()
{
    Size size;

    if (!Burnt(ref _fuse))
        size = _InitialContainerSize;
    else
        size = parent.Size;

    // ...
}

Если оно инициализировано значением false, результат запроса один раз возвращает значение false, переключается на значение true, и последующие вызовы возвращают значение true.

public static bool Burnt(ref bool value)
{
    if (!value)
    {
        value = true;
        return false;
    }
    else
        return true;
}

Конечно, это работает, но я не очень доволен и уверен, что есть более элегантные решения. Что бы вы выбрали?

5
задан Larry 28 March 2012 в 09:26
поделиться