上一篇初步学习了一下C#7.0的新功能“元组”,但是用的代码格式和旧版本的没啥差别(数据获取用的还是老一套,通过item1,item2,item3........不能忍!!!),只不过多了一些功能,在原先的基础上做了一些优化,今天继续学习,代码格式将使用最新语法!
基础语法
·元组功能在C#7.0和更高版本中可用,提供了简洁的语法,可以将多个数据元素组合到一个轻量级的数据结构中。以下示例说明如何声明一个元组变量,对其进行初始化以及访问其数据成员:
(string userName, int age) valTuple = ("张三", 33); Console.WriteLine($"你好,我是{valTuple2.userName},我今年{valTuple2.age}岁");
前边用自定义类型和名称,代替匿名类型,语法简洁!
· 返回多个值,利用箭头函数,语法更简洁,如下:
static void Main(string[] args)
{
string name = InitUserData().userName;
int age = InitUserData().age;
Console.WriteLine($"你好,我是{name},今年{age}岁");
Console.ReadKey();
}
static (string userName, int age) InitUserData() => ("张三", 33);
元组字段名称
您可以在元组初始化表达式或元组类型的定义中显式指定元组字段的名称,如以下示例所示:
var valTuple = (name: "张三", age: 55); Console.WriteLine($"你好,我是{valTuple.name},今年{valTuple.age}岁");
从C#7.1开始,如果不指定字段名称,则可以从元组初始化表达式中相应变量的名称推断出来,如以下示例所示
string name = "张三"; int age = 22; var newValTuple = (name, age); Console.WriteLine($"你好,我是{newValTuple.name},今年{newValTuple.age}岁");
元组分配和解构
C#支持满足以下两个条件的元组类型之间的分配:
- 两个元组类型具有相同数量的元素
- 对于每个元组位置,右侧元组元素的类型与相应的左侧元组元素的类型相同或隐式转换为相应的左侧元组元素的类型
元组元素值是按照元组元素的顺序分配的。元组字段的名称将被忽略而不分配,如以下示例所示:
(int, double) t1 = (17, 3.14); (double First, double Second) t2 = (0.0, 1.0); t2 = t1; Console.WriteLine($"{nameof(t2)}: {t2.First} and {t2.Second}"); // Output: // t2: 17 and 3.14 (double A, double B) t3 = (2.0, 3.0); t3 = t2; Console.WriteLine($"{nameof(t3)}: {t3.A} and {t3.B}"); // Output: // t3: 17 and 3.14
您还可以使用赋值运算符=
来解构在不同的变量元组实例。您可以通过以下方式之一进行操作:
var t = ("post office", 3.6); (string destination, double distance) = t; Console.WriteLine($"Distance to {destination} is {distance} kilometers.");
var
在括号外使用关键字来声明隐式类型的变量,并让编译器推断其类型:
var t = ("post office", 3.6); var (destination, distance) = t; Console.WriteLine($"Distance to {destination} is {distance} kilometers.");
使用现有变量:
var destination = string.Empty; var distance = 0.0; var t = ("post office", 3.6); (destination, distance) = t; Console.WriteLine($"Distance to {destination} is {distance} kilometers.");
常用的就这么多吧,再遇到新的在继续总结!