首页 > 解决方案 > 使用 using 声明一个匿名元组;可能吗?

问题描述

using Coordinate = (int x, int y);

不编译。

using Coordinate = System.Tuple<int, int>;

编译。

由于某些原因,我更喜欢前者;可以吗?

更新:

原因一直受到质疑和辩论,所以这里是为什么:

我有一个使用元组的小班。我可以写一个小元组class Coord{int x; int y;},但决定不写。相反,我(int x, int y)到处写,让鸭子打字发挥它的魔力。它可以正常工作,但在某些地方会妨碍可读性,可能是因为我们接受过阅读类型的训练PascalCase,例如(pare,the,sised).
所以我的想法是,就像给类型Tuple<int,int>一个别名一样,我可以给匿名类型(int x, int y)一个别名。然后我可以使用别名或匿名类型,具体取决于我认为更具可读性的内容。
(我的真实代码比 x&y 稍微复杂一些)

标签: c#

解决方案


不,不能使用前者,因为它不是有效的 C# 语法。

即使using Coordinate = System.Tuple<int, int>;编译,我想提出一种不同的方法来实现您可能想要实现的目标:

public class Coordinate
{
    public Coordinate(int x, int y)
    {
        X = x;
        Y = y;
    }

    public int X { get; set; }
    public int Y { get; set; }
}

var coordinate = new Coordinate(xVariable, yVariable);

您可以通过或访问您的X和变量。Ycoordinate.Xcoordinate.Y

正如maccettura所指出的,我应该包括我对这种方法的推理:

  1. 如果您稍后尝试在 Tuple 上更改坐标将限制您,因为它的项目在创建后无法修改
  2. 此外,我认为您可能想为您的坐标添加更多功能,例如使用 aToString()或其他方法/属性

推荐阅读