在模式匹配的第一个提议中,使用以下语法定义递归模式:
recursive_pattern
: positional_pattern
| property_pattern
;
链接:https://github.com/dotnet/csharplang/blob/master/proposals/patterns.md 为了演示位置模式,.Net团队使用了笛卡尔的例子,它覆盖了opreator:
public static bool operator is(Cartesian c, out double R, out double Theta)
注意:我知道'是' opreator不能在C#中重写
在另一个规范中: https://github.com/dotnet/csharplang/issues/1054
Recursive pattern matching defined like the following:
pattern
: declaration_pattern
| constant_pattern
| deconstruction_pattern
| property_pattern
;
当我使用以下链接测试模式匹配(上述)时: https://sharplab.io
解构模式工作正常但位置模式没有(我不能覆盖位置模式提议示例中描述的opreator)
我的问题:
位置模式和解构模式之间有什么不同?
工作守则:
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var stratec = new Company
{
Name = "stratec",
Website = "wwww.stratec.com",
HeadOfficeAddress = "Birkenfeld",
};
var firstEmploy = new Employ { Name = "Bassam Alugili", Age = 42, Company = stratec };
var microsoft = new Company
{
Name = "microsoft",
Website = "www.microsoft.com",
HeadOfficeAddress = "Redmond, Washington",
};
var thidEmploy = new Employ { Name = "Satya Nadella", Age = 52, Company = microsoft };
DumpEmploy(firstEmploy);
}
public static void DumpEmploy(Employ employ)
{
switch (employ)
{
case Employ{Name:"Bassam Alugili", Company:Company(_,_,_)} employTmp:
{
Console.WriteLine($"The employ: {employTmp.Name}! 1");
}
break;
default:
Console.WriteLine("Unknow company!");
break;
}
}
}
}
public class Company
{
public string Name { get; set; }
public string Website { get; set; }
public string HeadOfficeAddress { get; set; }
public void Deconstruct(out string name, out string website, out string headOfficeAddress)
{
name = Name;
website = Website;
headOfficeAddress = HeadOfficeAddress;
}
}
public class Employ
{
public string Name { get; set; }
public int Age { get; set; }
public Company Company { get; set; }
public void Deconstruct(out string name, out int age, out Company company)
{
name = Name;
age = Age;
company = Company;
}
}
如何修改代码以测试位置模式!?
这是链接:你也可以复制并粘贴你会得到相同结果的代码:
答案 0 :(得分:0)
这是有关文件过时和/或不清楚的问题。 “位置”和“解构”是同义词,均指代带括号的子模式列表。
中进行了描述递归模式具有可选类型,可选的解构模式子句(也称为位置模式子句),可选的属性模式子句和可选的名称。
有限制使用的语义规则(例如,您不能有一个模式,其中所有可选部分都被一次性省略)。
解构模式子句是带括号的子模式列表,这些子模式是带有可选名称-冒号的模式。