【问题标题】:In C# can you define an alias to a value tuple with names?在 C# 中,您可以为具有名称的值元组定义别名吗?
【发布时间】:2017-08-28 02:37:45
【问题描述】:

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

例如

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

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

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

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

【问题讨论】:

  • 我不知道答案,但看起来很像“我可以在模块级别使用var来定义变量吗?”
  • 如果它不编译意味着它不应该工作
  • 我不知道答案,但看起来最好为此目的创建一个类或结构。元组很好,但请不要过度使用它。
  • 有趣的评论@YeldarKurmangaliyev。使用它的原因是不必实现所有可比较的接口来用作对象的简单键。是的,是我偷懒了,不过也是把语言功能发挥的淋漓尽致。
  • @NickRandell - 大多数时候你为人们(其他开发人员)编写软件 - 他们会阅读你的代码。拥有具有描述性名称的类和属性 - 是更友好/有效的方法。大多数程序员花在阅读代码(自己的和其他人的)描述性名称和数据结构上的时间会节省他们的时间

标签: c# c#-7.0


【解决方案1】:

已更新。从 C# 10 开始,您可以定义结构或基于类的记录来满足此要求:

public record struct ResponseKey(Guid venueId, string contentId, string answer);
public record class ResponseKey(Guid venueId, string contentId, string answer);

请注意,class 对于第二个定义是可选的。


This has been requested, and recorded in the Roslyn repo on Github。然而,它在那里收到了喜忧参半的评价,the proposed record types 足以满足这一要求。

问题已在 Roslyn repo but is now being tracked in the C# language repo 中关闭。

【讨论】:

  • “[...] 记录类型,将超过此要求”,除非它们是类...
  • @NoelWidmer,记录可以是 C# 10 中的结构。
  • 值得注意的另一个好处:C# 对记录进行自动解构,这使它们更加方便(如果您使用解构)!
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多