using Coordinate = (int x, int y);
不编译。
using Coordinate = System.Tuple<int, int>;
可以编译。
由于某些原因,我更喜欢前者;能做到吗?
更新:
原因已经受到质疑和辩论,所以这里是原因:
我有一堂小课,可以使用元组。我可以写一个小的元组class Coord{int x; int y;}
,但决定不这样做。取而代之的是,我到处都写着(int x, int y)
,然后让鸭子打字发挥作用。它可以正常工作,但在某些地方会影响可读性,这可能是因为我们接受过{em> 的PascalCase
而非(pare,the,sised)
的阅读类型的训练。
因此我有一个想法,就像给类型Tuple<int,int>
命名一样,我也可以给匿名类型(int x, int y)
命名一个别名。然后,我可以使用别名或匿名类型,具体取决于我认为更具可读性的内容。
(我的真实代码比x&y复杂得多)
答案 0 :(得分:3)
没有前者不能使用,因为它不是有效的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
访问coordinate.X
和coordinate.Y
变量。
正如maccettura所指出的那样,我应该提供这种方法的理由:
ToString()
或其他方法/属性答案 1 :(得分:1)
2点注意事项
using
指令需要已知的名称空间或类型(int x, int y) t = ...
时,您只有编译器命令,而没有键入。 如果您将变量声明为元组,编译器会生成类似这样的内容
[System.Runtime.CompilerServices.TupleElementNames(new string[] {"x", "y"})]
System.ValueTuple<int, int> myVar = ...
我们在这里谈论的是语法糖,它使元组的使用更加容易,命名项在设计时可用,而实类型在编译时生成。但是某些指令等需要已知类型。因此,您会遇到导入类型不存在的问题。