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

能否在列表模式中无需额外切片将..定义为命名数组?

列表模式中直接命名..匹配的子数组问题

可以直接在列表模式中通过..捕获命名子数组,不需要额外切片,但你的示例写法不符合C#列表模式的语法规则。

正确的实现方式有两种:

方式一:在模式内通过when子句加长度约束

string[] s = {"<=", "some", "text", "=>"};

if (s is ["<=", .. string[] subarray when subarray.Length > 1, "=>"])
    Console.WriteLine(string.Join('\n', subarray));
else
    Console.WriteLine("ERROR");

方式二:先捕获子数组再判断长度

string[] s = {"<=", "some", "text", "=>"};

if (s is ["<=", .. var subarray, "=>"] && subarray.Length > 1)
    Console.WriteLine(string.Join('\n', subarray));
else
    Console.WriteLine("ERROR");

错误原因说明

你原代码里用..{Length: >1} AS string[] subarray的写法是错误的——列表模式中..需要直接跟要捕获的变量(可指定类型或用var),属性模式不能直接包裹..来实现捕获加约束,必须通过when子句或者后续的条件判断来添加长度限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:45:36