在 C# 中,元组是一种数据结构,用于组织数据,可容纳 2 个或更多任意类型的字段。
元组通常是通过将 2 个或更多用逗号分隔的表达式放在一对括号内来创建的。
string boast = "All you need to know";
bool success = !string.IsNullOrWhiteSpace(boast);
(bool, int, string) triple = (success, 42, boast);
元组可用于赋值和初始化操作,也可用作返回值或方法实参。
字段使用点语法提取。默认情况下,第一个字段是Item1,第二个是Item2,依此类推。非默认名称将在下文讨论。
// initialization
(int, int, int) vertices = (90, 45, 45);
// assignment
vertices = (60, 60, 60);
// return value
(bool, int) GetSameOrBigger(int num1, int num2)
{
return (num1 == num2, num1 > num2 ? num1 : num2);
}
// method argument
int Add((int, int) operands)
{
return operands.Item1 + operands.Item2;
}
字段名Item1等无助于写出可读的代码。下面的代码展示了为元组字段命名的 2 种方式。另请注意,在下面的代码中,var可用于元组,并且类型会被推断出来。这对于具有命名字段和未命名字段的元组同样适用。
// name items in declaration
(bool success, string message) results = (true, "well done!");
bool mySuccess = results.success;
string myMessage = results.message;
// name items in creating expression
var results2 = (success: true, message: "well done!");
bool mySuccess2 = results2.success;
string myMessage2 = results2.message;
这道练习让你分析电话号码。
你需要实现 2 个功能。
传给这些例程的电话号码保证是 NNN-NNN-NNNN 的形式,例如 212-515-9876,且不为 null。
你的分析应当返回 3 项数据
实现(静态)方法PhoneNumber.Analyze(),生成电话号码信息。
PhoneNumber.Analyze("631-555-1234");
// => (false, true, "1234")
实现(静态)方法PhoneNumber.IsFake(),使用任务 1 中生成的电话号码信息来检测该电话号码是否为伪造号码。
PhoneNumber.IsFake(PhoneNumbers.Analyze("631-555-1234"));
// => true