能否在列表模式中无需额外切片将..定义为命名数组?
列表模式中直接命名..匹配的子数组问题
可以直接在列表模式中通过..捕获命名子数组,不需要额外切片,但你的示例写法不符合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
相关产品推荐
相关产品推荐

