我看到下面的代码:
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模式与丢弃模式组合时如何工作?
1条答案
按热度按时间apeeds0o1#
解构器会自动添加到记录中。
请参阅:特性定义的位置语法
上面写着:
Deconstruct方法,记录声明中提供的每个位置参数都有一个out参数。该方法解构使用位置语法定义的属性;它忽略使用标准属性语法定义的属性。
如果解构器只有一个out参数,那么
r is (p)
可能被误解为简单的括号表达式,因此需要丢弃。我在Open LDM Issues in Pattern-Matching #1054的“单元素位置解构”下找到了唯一的引用