You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中在if条件内声明变量用于后续判断的正确语法是什么

你要找的是C# 7.0及以上版本引入的模式匹配语法,正确写法分不同版本兼容情况:

写法1:兼容C# 7.0及以上版本

用is关键字做类型判断的同时直接声明对应类型的局部变量,匹配成功后无需额外强转即可使用:

public void SomeMethod(object obj)
{
    // 类型匹配成功时会把obj转换为Order类型赋值给myObj变量
    if (obj is Order myObj && myObj.Item != null)
    {
        Console.WriteLine(myObj.Item.Name);
    }
}

写法2:C# 8.0及以上版本的属性模式简写

可以直接在类型匹配的同时校验内部属性的非空状态,同时把属性值赋值给局部变量,省去单独访问属性的步骤:

public void SomeMethod(object obj)
{
    // {}是空模式,代表Item属性不为null,同时把非空的Item赋值给myItem变量
    if (obj is Order { Item: {} myItem })
    {
        Console.WriteLine(myItem.Name);
    }
}

写法3:C# 9.0及以上版本的更易读写法

可以用not null替代空模式{},语义更清晰:

public void SomeMethod(object obj)
{
    if (obj is Order { Item: not null myItem })
    {
        Console.WriteLine(myItem.Name);
    }
}

以上三种写法在对应C#版本下都可以正常运行,和你最开始写的强转判断逻辑完全等效,同时避免了多次强制转换的冗余代码,也能保证类型安全。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:15:00