在使用位置模式匹配时,我本应使用".."(Slice)语法,就像它对数组元素所做的那样.

下面是我的例子:

  // Create and populate a record
  var vehicle = new VehicleData(2, "Model Y", 99_990M, 5, 3.5M);

  // Record, deconstruct, and positional pattern matching
  var bestForCustomer = vehicle switch
  {
    (_, "Model Y", ..) => "Best for small family",            // Doesn't work
    (_, "Model X", _, _, _) => "Best for large family",       // _ does work
    (_, "Model X Plaid", _, _, _) => "Best for performance",
    _ => "Best for price"
  };

有人知道为什么...(切片)语法在这种情况下不起作用?

推荐答案

您试图在模式匹配中使用..(切片),但此语法是List patterns的一部分.对于Record使用这种语法是不可接受的,仅对于具有以Range为参数的可访问索引器的类型或具有两个int参数的可访问的Slice方法是不可接受的.

以下是一篇关于列表模式的文档中的一句话:

list_patterncountableindexable的任何类型都兼容-它有一个可访问的索引器,该索引器将Index作为参数,否则它就是一个具有单个int参数的可访问索引器.如果两个索引器都存在,则首选前者.

带子模式的slice_patterncountablesliceable的任何类型都兼容-它有一个可访问的索引器,该索引器将Range作为参数,否则它就是一个具有两个int参数的可访问的Slice方法.如果两者都存在,则前者更可取.

无子图案的slice_pattern与与list_pattern兼容的任何类型都兼容.

因此,您只能使用discard pattern _作为要忽略的元素的占位符.

还要注意的是,列表模式只能在C#11和更高版本中使用.

Csharp相关问答推荐

将修剪声明放入LINQ中

. NET 8 HttpClient post参数将其情况更改为camel'

HttpContext. RequestAborted当Android APP失go 连接时未取消

如何使用CsvReader获取给定列索引的列标题?

不仅仅是一个简单的自定义按钮

WPF DataGrid中的三维数据

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

从依赖项容器在.NET 8中的Program.cs文件中添加IOC

为什么在使用动态obj+类obj时会调用串联?

用C#从Word文档中删除重复的节控件和文本内容控件

如何使用XmlSerializer序列化带有CDATA节的XML文件?

将字节转换为 struct 并返回

C#中Java算法的类似功能

C#按名称从类获取属性值类型<;t>;,我需要反射吗?

如何在同一成员上组合[JsonPropertyName]和[ObservableProperty]?

为什么我不能从我的异步任务方法中返回异步任务方法?

这是否比决定是否使用ConfigureAWait(False)更好?

如何在C#中正确类型化带有泛型的嵌套类

用于ASP.NET核心的最小扩展坞

MS Project读取项目自定义域