我有这样的函数(parent
和formToBeShown
是WinForms表单实例):
if (parent == null)
while (!formToBeShown.IsDisposed)
Do();
else
while (!parent.IsDisposed && !formToBeShown.IsDisposed)
Do();
我发现这些非常不优雅。我希望只调用一次Do
函数。如果我可以将所有条件合并到一个while循环中,那就更好了。不知道我是否有脑屁,但我想不出办法达到这个目的。一些想法?
答案 0 :(得分:7)
我认为使用下面的代码,你只能使用while循环一次。
while (!formToBeShown.IsDisposed && (parent == null || !parent.IsDisposed))
Do();
答案 1 :(得分:2)
让我们从逻辑上考虑这个。
第一个循环条件可以写成如下:
(parent == null && !formToBeShow.IsDisposed)
第二个循环的条件是:
(!parent.IsDisposed && !formToBeShown.IsDisposed)
你基本上有3个布尔变量:
设A:parent == null 设B:!formToBeShow.IsDisposed 设C:!parent.IsDisposed
现在你可以简化为
// Loop1 || Loop2 call Do() When:
(A && B) || (C && B)
使用布尔逻辑的规则,这变为: B&& (A || C)
while(!formToBeShow.IsDisposed && (parent == null || !parent.IsDispoed))
Do();
你需要确保父== null检查首先是它可以快捷方式,避免尝试取消引用null。
虽然存在问题,但您通过在每个循环上检查(parent == null)来执行其他工作。所以从技术上讲,如果你想把它带到循环之外并写一个以上,你可能有理由。虽然,对于这么简单的事情,我可能更喜欢单循环。