【发布时间】:2012-04-11 20:58:54
【问题描述】:
我有很多代码片段必须在初始化期间运行一次。
我必须以这种方式使用布尔标志,因为它在事件中
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;
}
当然,它有效,但我只是适度满意,我相信还有更优雅的解决方案。什么是你的?
【问题讨论】:
-
return value || !(value = true);(开个玩笑!) -
有趣。到目前为止,结果是三票赞成,三票结束。
-
不是一个真正的问题。应该在代码审查网站上。不在这里。
-
最好的解决方案是您的第一次实施。第二个不必要地隐藏了你的意图。将该变量重命名为 _oneTimeSizeInitializeDone 并忘记
-
顺便说一句,我完全理解您希望避免这种重复。我认为,如果您只是将方法和变量的名称更改为更易于理解的名称,这可能是一个不错的模式(甚至可以使它成为一个非常小的类)。
标签: c# boolean code-design