用布尔值做保险丝

Lar*_*rry 5 c# boolean code-design

我有很多代码片段必须在初始化期间运行一次.

我必须以这种方式使用布尔标志,因为它在一个事件中

bool _fuse;

void PerformLayout()
{
    Size size;

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

因为它经常发生,我做了一些事情来使这个布尔变量看起来像一个保险丝:

所以我这样做了:

bool _fuse;

void PerformLayout()
{
    Size size;

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果它初始化为false,则查询结果返回false一次,将切换为true,并且后续调用返回true.

public static bool Burnt(ref bool value)
{
    if (!value)
    {
        value = true;
        return false;
    }
    else
        return true;
}
Run Code Online (Sandbox Code Playgroud)

当然,它有效,但我只是中等满意,我相信有更优雅的解决方案.你的是什么?