使用 using 声明一个匿名元组;有可能吗?

问题描述 投票:0回答:3
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 稍微复杂一些)

c#
3个回答
4
投票

    (int x, int y)
  1. 指令需要已知的命名空间或类型
    当元组声明为 
  2. using
  3. 时,您只有编译器命令,但没有类型。
    
    
    
  4. 如果你将变量声明为元组编译器会生成类似这样的东西

(int x, int y) t = ...

我们在这里讨论的是语法糖,它使元组的使用变得更容易,并且在设计时可用命名项,并在编译时生成真实类型。但某些指令等需要已知类型。因此,您会遇到导入不存在的类型的问题。

查看这篇文章


4
投票

即使

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

编译,我想针对您可能想要实现的目标提出一种不同的方法:


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
coordinate.X
变量。

正如

maccettura

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

如果您稍后尝试更改元组的坐标,则会限制您,因为它的项目在创建后无法修改
  1. 此外,我认为您可能想为您的坐标添加更多功能,例如使用
  2. coordinate.Y
  3. 或其他方法/属性
    
        

0
投票
ToString()

BandPass
示例:

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-tuples#code-try-7

© www.soinside.com 2019 - 2024. All rights reserved.