在C#中,您可以为具有名称的值元组定义别名吗?


92

我知道可以使用using关键字在C#中定义别名。

例如

using ResponseKey = System.ValueTuple<System.Guid, string, string>;

但是,是否可以对值元组使用新语法来定义一个?

using ResponseKey = (Guid venueId, string contentId, string answer);

此语法似乎不起作用。应该是?


1
我不知道答案,但是看起来很像“我可以在模块级别使用var定义变量吗?”
马里奥·维尔纳里

如果不编译就意味着它不起作用
SelmanGenç17年

4
我不知道答案,但是看起来为此目的创建一个类或结构更好。元组很好,但是请不要过度使用它。
Yeldar Kurmangaliyev'4

4
有趣的评论@YeldarKurmangaliyev。使用此方法的原因是不必实现所有可比较的接口即可用作对象的简单键。是的,我很懒,但是它也充分利用了语言功能。
尼克·兰德尔

3
@NickRandell-大多数时候,您为其他开发人员编写软件时,他们会读取您的代码。具有描述性名称的类和属性-是更友好/有效的方法。程序员大部分时间都花在阅读代码上(自己和其他人),描述性名称和数据结构将节省他们的时间
Fabio

Answers:



1

using定义为: (MSDN)。using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) 既不是名称空间,也不是(完全限定的)类型名称。

但是我主要是在猜测。直到现在,C#7.0都不存在。


1
那就是C#1.1的规范,那怎么证明C#7.0呢?
svick

1
我了解这种假设是如何产生的。本来可以做到相同的,但这是不对的。使用不是类型的别名。但是对于类型名称或名称空间名称。与编译器相关的功能是您最后可以更改的功能,而不会破坏现有代码。因此,他们很可能无法扩展它。但是所有这些都可以在上面的David Arno的文章中更详细地加以解释。我投票赞成,因为它回答得更好。让您的问题成为非问题...
Christopher

2
@svick问题是是否应允许使用此特定语法。这可以正确地回答“不,C#开发人员没有义务允许这种特定语法,因为自从C#的第一个版本开始就不允许类似的语法”。更广泛的问题是是否应在中允许任何类型表达式using
IllidanS4支持Monica's

1
@ IllidanS4如果这就是这个答案的意思,那么目前还不清楚。它没有提到链接的规范是旧的,也不是您所做参数的任何部分。
svick '17

5
@Christopher如果我认为答案不好,我会对此发表评论。对我而言,答案写得有多快或有什么免责声明都无所谓。而且,如果您认为您的答案没有任何价值,请删除它。另外,我认为人们会来找知情的答案,所以也许您在写一个不知情的答案之前应该考虑一下?
svick
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.