代码之家  ›  专栏  ›  技术社区  ›  LosManos

使用声明匿名元组;可能吗?

c#
  •  -1
  • LosManos  · 技术社区  · 7 年前
    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> 我可以给匿名类型一个别名 (整数x,整数y) 化名。然后我可以使用别名或匿名类型,这取决于我认为更具可读性的内容。
    (我的真实代码比x&y)

    2 回复  |  直到 7 年前
        1
  •  2
  •   T.S.    7 年前

    需要注意的两件事

    1. using 指令需要已知的命名空间或类型
    2. (int x, int y) t = ... 您只有编译器命令,但没有类型。

    [System.Runtime.CompilerServices.TupleElementNames(new string[] {"x", "y"})]
    System.ValueTuple<int, int> myVar = ...
    

    Check this article

        2
  •  3
  •   Tobias Tengler    7 年前

    不,不能使用前者,因为它不是有效的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 Y varibale via coordinate.X coordinate.Y

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

    1. 此外,我认为您可能希望在坐标中添加更多功能,例如使用 ToString() 或其他方法/属性