You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#中该语法为何有效?WPF里is关键字后变量的作用

解答你的C#语法疑问

1. 为何这个C#语法是有效的?

这个if (parameter is IHavePassword passwordContainer)语法是C# 7.0及更高版本官方支持的类型模式匹配特性,属于语言规范里的正式语法,所以完全有效。微软引入这个特性是为了简化类型检查与转换的代码,让逻辑更简洁可读。

2. is关键字后部分的作用是什么?

你完全想错啦——这可不是把参数和IHavePassword的新实例做比较!这句话其实一次性完成了两个关键操作:

  • 类型检查:判断parameter是否可以安全转换为IHavePassword类型(比如参数本身是该接口的实现类实例,或者能隐式转成这个类型);
  • 赋值变量:如果检查通过,自动把parameter转换为IHavePassword类型,并赋值给passwordContainer变量,你直接就能在if代码块里用这个变量,不用再手动强制转换或者写as+空判断。

举个新旧写法的对比,你就懂它有多方便了:

旧写法(C# 7.0之前)

private void DoLogin(object parameter) 
{
    // 先尝试转换,再判断是否为空
    IHavePassword passwordContainer = parameter as IHavePassword;
    if (passwordContainer != null) 
    {
        // 在这里使用转换后的变量
    }
}

新写法(当前语法)

private void DoLogin(object parameter) 
{
    // 检查+转换+赋值一步到位
    if (parameter is IHavePassword passwordContainer) 
    {
        // 直接用passwordContainer,无需额外转换
    }
}

还有个细节要提:passwordContainer这个变量的作用域只在if的代码块里,出了这个块就不能用了——这是特意设计的,确保只有类型检查通过时才能访问它,从根源上避免了空引用的风险。


内容的提问来源于stack exchange,提问作者turingcomplete

火山引擎 最新活动