IkG*_*Mee 2 language-features tuples c#-7.0 valuetuple
我指的是此处描述的元组文字: https: //blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/#comment-321926
\n\n喜欢元组字面意思。
\n\n然而,我预见到很多人都会在返回元组中查找项目的顺序,并且想知道我们如何解决这个问题。
\n\n例如,将元组中的项目名称作为身份定义方面而不是顺序更有意义吗?或者有没有办法做到这一点我没有看到?
\n\n例如:假设 NextEmployee() 是一些库方法,我没有\xe2\x80\x99t 的源代码,并且\xe2\x80\x99t 没有特别详细的文档记录,假设它返回(firstname: \xe2\x80\x9cjamie\xe2\x80\x9d, lastname: \xe2\x80\x9chince\xe2\x80\x9d, id: 102348)给我,我说:
(string lastname, var _, int __) = NextEmployee(); // I only need the last name\nRun Code Online (Sandbox Code Playgroud)\n\n编译器要么很乐意将名字分配给姓氏,要么对此发出警告或错误。为什么不直接将姓氏映射到姓氏呢?
\n\n我\xe2\x80\x99d 看到允许更松散耦合的架构,如果我们\xe2\x80\x99t 不必记住元组中姓氏的索引,并且可以只要求一个方面\xe2\x80\x9clastname\ xe2\x80\x9d 之类的。
\n元组只是一袋变量。作为变量,您可以分配任何可分配给变量类型的值,而不管变量名称如何。
这些名称仅作为变量名称的指示。返回值的唯一区别是编译器使用TupleElementNames 属性保留元组元素的名称。
事实上,即使存在名称,如果您不使用相同的名称,编译器也会警告您,通常这是一个错误,但语法仍然有效:
(string firstname, string lastname, int id) NextEmployee()
=> (apples: "jamie", potatos: "hince", oranges: 102348);
/*
Warning CS8123 The tuple element name 'apples' is ignored because a different name is specified by the target type '(string firstname, string lastname, int id)'.
Warning CS8123 The tuple element name 'potatos' is ignored because a different name is specified by the target type '(string firstname, string lastname, int id)'.
Warning CS8123 The tuple element name 'oranges' is ignored because a different name is specified by the target type '(string firstname, string lastname, int id)'.
*/
Run Code Online (Sandbox Code Playgroud)
您在这里使用的语法:
(string lastname, var _, int __) = NextEmployee();
Run Code Online (Sandbox Code Playgroud)
不是元组声明语法,而是创建LastName变量、_变量和__变量的元组解构语法。
这些都是产生相同结果的等价物:
(var lastname, var _, var __) = NextEmployee(); // or any combination of变量and type namesvar (lastname, _, __) = NextEmployee();要声明一个元组来接收方法的返回,您需要声明一个元组变量:
(string firstname, string lastname, int id) t = NextEmployee();var t = NextEmployee();但看来您的意图是忽略LastName和id值:
(_, string lastname, _) = NextEmployee(); // declares a lastname variable and ignores firstname and id
Run Code Online (Sandbox Code Playgroud)
但如果您确实编写了(string lastname, _, _) = NextEmployee();,那么您将分配一个lastname以返回字符串“variable”的值命名的本地字符串变量firstname。
请记住,元组不是实体。它们是一组价值观。如果您使用的库使用元组作为实体,请注意该库可能存在其他问题。
| 归档时间: |
|
| 查看次数: |
1613 次 |
| 最近记录: |