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

C# 10 条件内联声明模式匹配变量提示未赋值错误问题咨询

问题1:赋值表达式内的模式变量未赋值报错

你遇到的不是C# 10的边界问题,是模式变量的明确赋值规则限制:
只有当is模式匹配表达式直接作为if的条件时,编译器才会判定:进入if代码块时,模式变量一定被成功赋值。
当你把模式匹配表达式放到赋值语句的右侧,整个if的条件变成了「赋值表达式的返回值」,编译器的明确赋值分析不会跨表达式推导「赋值表达式的结果等价于模式匹配的结果」,所以它会认为aggregateException可能没有被赋值,因此报错。

如果确实需要同时给isAggregate赋值,可以拆分写法,就能正常编译:

bool isAggregate = exception is AggregateException aggregateException;
if (isAggregate)
{
    foreach (var innerException in aggregateException.InnerExceptions)
    {
    }
}

这种写法下编译器可以明确判定isAggregate为true时,aggregateException一定已经完成赋值。


问题2:is null后加变量声明报错

这个写法本身不符合C#的模式匹配语法规则:
is null属于常量模式,作用是判断表达式的值是否等于null,常量模式本身不支持附带变量声明。只有类型模式、关系模式、属性模式等支持在匹配成功时输出捕获变量。

如果你是要判断InnerException不为null同时捕获变量,可以改成如下写法:

if (exception.InnerException is not null innerException)
{
    // 此处innerException一定不为null
}

你熟悉的int.TryParse写法属于out参数的明确赋值规则,和模式匹配的变量声明是两套独立的语法规则,不能直接类比。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:24:03