.net var模式如何与discard模式一起工作?

carvr3hs  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(115)

我看到下面的代码:

public record Address(string Country);
public record UsAddress(string State) : Address("us");

public static string CheckAddress(Address address)
{
   return address switch
   {
      UsAddress(var state) => "...",
      ("de") _ => "...",
      (var country) _ => "...",
   };
}

我有一些关于模式匹配的问题:
Address没有Deconstruct方法,因为它只有一个属性,那么为什么它仍然可以使用位置模式("de")
(var country)相同,为什么需要丢弃_,var模式与丢弃模式组合时如何工作?

apeeds0o

apeeds0o1#

解构器会自动添加到记录中。
请参阅:特性定义的位置语法
上面写着:
Deconstruct方法,记录声明中提供的每个位置参数都有一个out参数。该方法解构使用位置语法定义的属性;它忽略使用标准属性语法定义的属性。
如果解构器只有一个out参数,那么r is (p)可能被误解为简单的括号表达式,因此需要丢弃。
我在Open LDM Issues in Pattern-Matching #1054的“单元素位置解构”下找到了唯一的引用

相关问题