C# 如何干燥这两个“当条件做”?
我有一个类似这样的父函数,FormToBeshow是WinForms表单实例:C# 如何干燥这两个“当条件做”?,c#,while-loop,dry,C#,While Loop,Dry,我有一个类似这样的父函数,FormToBeshow是WinForms表单实例: if (parent == null) while (!formToBeShown.IsDisposed) Do(); else while (!parent.IsDisposed && !formToBeShown.IsDisposed) Do(); 我觉得这些非常不雅。我希望只调用一次Do函数。如果我能将所有条件合并到一个while循环中,那就更好
if (parent == null)
while (!formToBeShown.IsDisposed)
Do();
else
while (!parent.IsDisposed && !formToBeShown.IsDisposed)
Do();
我觉得这些非常不雅。我希望只调用一次Do函数。如果我能将所有条件合并到一个while循环中,那就更好了。我不知道我是否有大脑放屁,但我想不出一个方法来实现这一点。一些想法?我认为使用下面的代码,您只能使用while循环一次
while (!formToBeShown.IsDisposed && (parent == null || !parent.IsDisposed))
Do();
我们从逻辑上考虑这个问题。 第一个循环条件可以写成如下:
(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,您正在做额外的工作。所以,从技术上讲,如果你想把它带到循环之外,并编写多个循环,你可能有理由这样做。不过,对于这么简单的东西,我可能更喜欢单循环。谢谢你的解释。让我来回答马克·贾格斯的问题,因为他是第一个提出这两个答案都是正确的,但有时这不是看谁先得到答案的竞赛,而是谁花时间回答并解释原因的竞赛。未来的读者将从@Alan那里得到更有益的答案。。。只是说说而已。