表达总是正确的,即使它不是

时间:2018-01-25 00:37:12

标签: c#

我有以下代码:

if (!(sender is Button b)) return false;
if (!(sender is ToolStripMenuItem menuItem)) return false; // always true

switch (b.Name)
{
    //some code
}

因此,由于某些我无法确定的原因,第二行总是被认为是真的。如果我先移动它并且第一个移动它,那么按钮线总是假定为真。无论我把第二条线放在哪一条线上,它总是被认为是真的,但如果它是第一条则不然。

我试图理解为什么会发生这种情况以及如何解决它。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

根据您的评论和要求执行代码,具体取决于sender类型,具体如何......

switch (sender)
{
    case Button b:
        //Do button stuff;
        break;
    case ToolStripMenuItem menuItem:
        //Do menu item stuff;
        break;
    default:
        return false;
}

答案 1 :(得分:2)

第一行保证senderButton

这意味着它也不能是ToolStripMenuItem,因此第二次检查将始终成功。