0

我有这样的功能(parent并且formToBeShown是 WinForms 表单实例):

if (parent == null)
    while (!formToBeShown.IsDisposed)
        Do();
else
    while (!parent.IsDisposed && !formToBeShown.IsDisposed)
        Do();

我觉得这些非常不雅。我希望该Do函数只调用一次。如果我可以将所有条件合并到一个 while 循环中,甚至更好。不知道我是不是脑子有屁,但我想不出办法来实现这一点。一些想法?

4

2 回答 2

7

我认为使用下面的代码,您只能使用一次 while 循环。

while (!formToBeShown.IsDisposed && (parent == null || !parent.IsDisposed))
        Do();
于 2012-10-16T01:50:47.320 回答
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();

您需要确保首先检查 parent == null 检查它可能会缩短并避免尝试取消引用 null。

但是,这有一个问题,您通过在每个循环上检查 (parent == null) 来做额外的工作。所以从技术上讲,如果你想把它带出循环并写不止一个,你也许有理由。虽然,对于如此简单的事情,我可能更喜欢单循环。

于 2012-10-16T01:56:22.593 回答