为什么else语句要运行呢?

本文关键字:运行 else 语句 为什么 | 更新日期: 2023-09-27 18:09:54

所以基本上,我遇到了一个问题,我不知道。我有这样的代码:

if ((v - e.Delta) <= 0) vScrollBar1.Value = vScrollBar1.Minimum;
if ((v - e.Delta) >= vScrollBar1.Maximum) vScrollBar1.Value = vScrollBar1.Maximum;
else vScrollBar1.Value -= e.Delta;

尽管第一个if语句为真并运行其代码,但它仍然运行"else"代码。例如:v = 0, e.d = 120所以第一个if语句为真并且有效,但我不知道为什么它运行else语句,当第二个if语句为真时它不运行。谢谢你的回答/建议!

为什么else语句要运行呢?

这两个if是独立的

if ((v - e.Delta) <= 0) vScrollBar1.Value = vScrollBar1.Minimum;
if ((v - e.Delta) >= vScrollBar1.Maximum) vScrollBar1.Value = vScrollBar1.Maximum;
else vScrollBar1.Value -= e.Delta;

您应该在第二个if之前添加一个else。这样的:

if      ((v - e.Delta) <= 0)                   vScrollBar1.Value = vScrollBar1.Minimum;
else if ((v - e.Delta) >= vScrollBar1.Maximum) vScrollBar1.Value = vScrollBar1.Maximum;
else                                           vScrollBar1.Value -= e.Delta;

第二行缺少初始else
但是更好的方法是使用三元运算符:

 vScrollBar1.Value = 
     v - e.Delta <= 0?                   vScrollBar1.Minimum:
     v - e.Delta >= vScrollBar1.Maximum? vScrollBar1.Maximum:
                                         vScrollBar1.Value - e.Delta;

两个if是不同的。你看,c#中条件的顺序是if-else if-else。因此,使第二个if成为else if,您的逻辑应该按预期运行。

if ((v - e.Delta) <= 0) vScrollBar1.Value = vScrollBar1.Minimum;
else if ((v - e.Delta) >= vScrollBar1.Maximum) vScrollBar1.Value = vScrollBar1.Maximum;
else vScrollBar1.Value -= e.Delta;

德不懂!