记录和位置模式与".."匹配



我本以为会有"(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"
};

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

您正在尝试在模式匹配中使用..(slice),但此语法是列表模式的一部分。对于记录使用这种语法是不可接受的,只有对于具有可访问索引器的类型,该索引器以Range作为参数,或者具有两个int参数的可访问Slice方法。

下面是列表模式文档中的一段话:

list_pattern兼容任何类型的countableindexable——它有一个可访问索引器,以Index作为参数,或者一个可访问索引器,只有一个int参数。如果两个索引器都存在,则首选前者。

带子模式的slice_pattern兼容countablesliceable的任何类型——它有一个可访问的索引器,以Range作为参数,或者一个可访问的Slice方法,带两个int参数。如果两者都存在,则首选前者。

没有子模式的slice_pattern与任何与list_pattern兼容的类型都是兼容的。

因此,您只能使用丢弃模式_作为您想要忽略的元素的占位符。

还要注意列表模式只在c# 11及以后的版本中工作。

相关内容

  • 没有找到相关文章

最新更新