推荐答案
// www.javascriptcn.com code example
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) => (X, Y) = (x, y);
public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);
}
public static string GetQuadrant(Point point) => point switch
{
(0, 0) => "Origin",
var (x, y) when x > 0 && y > 0 => "Quadrant 1",
var (x, y) when x < 0 && y > 0 => "Quadrant 2",
var (x, y) when x < 0 && y < 0 => "Quadrant 3",
var (x, y) when x > 0 && y < 0 => "Quadrant 4",
_ => "On Axis"
};本题详细解读
位置模式 (Positional Pattern) 的基本概念
位置模式是 C# 8.0 引入的一种模式匹配方式,允许你根据对象的解构结果进行模式匹配。它通常与 Deconstruct 方法结合使用,该方法用于将对象的属性解构为多个变量。
代码解析
Point 类:
Point类有两个属性X和Y,分别表示点的横坐标和纵坐标。- 构造函数用于初始化
X和Y。 Deconstruct方法用于将Point对象的X和Y属性解构为两个变量。
GetQuadrant 方法:
- 该方法使用
switch表达式和位置模式来判断点所在的象限。 (0, 0)匹配原点。var (x, y)用于解构Point对象,并根据x和y的值判断象限。when子句用于进一步过滤条件。_是默认情况,表示点在坐标轴上。
- 该方法使用
使用场景
位置模式非常适合用于处理具有多个属性的对象,并且需要根据这些属性的组合值进行条件判断的场景。通过解构和模式匹配,代码可以更加简洁和易读。
注意事项
Deconstruct方法必须与位置模式配合使用,否则无法解构对象。- 位置模式可以与其他模式(如类型模式、属性模式)结合使用,以实现更复杂的匹配逻辑。
通过这种方式,C# 的位置模式提供了一种强大且灵活的方式来处理复杂的数据结构。