if语句可以使用模式匹配与变量赋值组合吗?

时间:2018-06-30 06:22:30

标签: c# pattern-matching

我正在谈论的代码示例:

if (sender is Panel p)
{
    if (p.Enabled == false)
    {
        AMButton.Checked = false;
        PMButton.Checked = false;
        currentSelectedTime = null;
    }
}

一旦在第一个if语句中强制将变量p转换为两个语句,是否有可能对变量p进行“更多操作”?

2 个答案:

答案 0 :(得分:4)

  

诸如if(发送方为Panel p.Enabled)之类的东西。如果两者结合   语句成一行。这有道理吗?

if(sender is Panel p && p.Enabled)

还是变得丑陋

if(sender is Panel p && (p.Enabled = somethingElse) == ((someInt = anotherInt) == 5))

答案 1 :(得分:2)

可接受的答案

if (sender is Panel p && p.Enabled)

是正确的并且现在可以正常工作。

在C#8中,模式匹配(可能)将扩展为允许属性匹配:

if (sender is Panel { Enabled: true } p)

这现在看起来有点陌生,但它可能越来越惯用,尤其是在匹配多个属性时。递归模式也可以用于引入更多模式变量,并且“外部”模式不需要模式变量。例如,假设我们只需要面板中的Tag属性,我们可以使用:

if (sender is Panel { Enabled: true, Tag: var tag })
{
    // Use tag in here
}