我正在谈论的代码示例:
if (sender is Panel p)
{
if (p.Enabled == false)
{
AMButton.Checked = false;
PMButton.Checked = false;
currentSelectedTime = null;
}
}
一旦在第一个if语句中强制将变量p转换为两个语句,是否有可能对变量p进行“更多操作”?
答案 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
}