gpt4 book ai didi

c# - 用 boolean 值做 fuse

转载 作者:太空狗 更新时间:2023-10-29 23:33:29 25 4
gpt4 key购买 nike

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

我必须这样使用 boolean 标志,因为它在事件中

bool _fuse;

void PerformLayout()
{
Size size;

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

// ...
}

因为它经常发生,我做了一些事情让这个 boolean 变量看起来像一个 fuse :

所以我这样做了:

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;
}

当然,它可以工作,但我只是比较满意,而且我确信还有更优雅的解决方案。什么是你的?

最佳答案

我认为这里避免重复的主旨是正确的(即使重复非常小……但仍然如此)。将其封装并正确命名即可:

struct InitializerGuard {
private bool hasRun;

public bool HasRun() {
if (hasRun)
return true;
hasRun = true;
return false;
}
}

用法:

InitializerGuard sizeInitializer;

void PerformLayout()
{
Size size;

if (!sizeInitializer.HasRun())
size = _InitialContainerSize;
else
size = parent.Size;

// ...
}

但是,如果您发现自己经常使用此模式,则可能表明需要进行重构。也许只是为某些变量分配默认值?无论如何,为什么它们没有被初始化?

关于c# - 用 boolean 值做 fuse ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9904613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com