可通过C#中的参数传递的自定义数字后缀

时间:2017-11-22 05:08:08

标签: c# coordinates suffix

我有一个传递“自定义”3D坐标的应用程序。坐标可以是绝对的也可以是相对的。

我一直在考虑为每个值x,y,z快速表达这个值,而不必有一个包含值的多维数组和一个关于值是相对值还是绝对值的布尔值。

我想避免的例子:

Coordinate c = new Coordinate({100.0,true},{25.0,false},{100.0,true}):

我想到的一种方法是使用用户定义的文字,例如100.0F,而不是预先存在的文字,使用基于十进制的运算符,如100.0A表示绝对值和100.0R表示仅与Coordinate类相关联的亲戚。这可能吗?

我的目标示例:

public void SomeMethod(Coordinate 50.0R, Coordinate 25.0A, Coordinate 50.0R) 
{ 
    //... 
}

或者,如果这是不可能的,是否还有其他非笨重的方法来传递基于十进制的数字以及附加指标,看它们是绝对的还是相对的?

2 个答案:

答案 0 :(得分:2)

新的using System; namespace test { class Program { public class Coordinate { public Coordinate((double Value, bool IsRelative) x, (double Value, bool IsRelative) y, (double Value, bool IsRelative) z) { X = x; Y = y; Z = z; } public (double Value, bool IsRelative) X { get; } public (double Value, bool IsRelative) Y { get; } public (double Value, bool IsRelative) Z { get; } public override string ToString() { return $"({X},{Y},{Z})"; } } public static void SomeMethod(Coordinate coordinate) { Console.WriteLine(coordinate); Console.WriteLine(coordinate.X.Value); Console.WriteLine(coordinate.Y.IsRelative); } public static void Main() { var c = new Coordinate((100.0, true), (25.5, false), (100, true)); SomeMethod(c); Console.ReadKey(); } } } 会提供一种非常干净的语法来表达您尝试实现的目标。

元组将提供更直观的语法。

ValueTuple

你确实需要{{1}} nuget包& C#7

答案 1 :(得分:1)

您无法在C#中定义自己的自定义后缀。我假设最常见的用例是所有坐标相对,或者所有坐标都是绝对的,那么为什么不在Coordinate类上为这些情况定义两个静态方法:

var location = Coordinate.Relative(100.0, 25.0, 100.0);
var target = Coordinate.Absolute(100.0, 25.0, 100.0);

您还可以使构造函数采用固定数量的维度,而不是数组:

var location = new Coordinate(100.0, true, 25.0, false, 100.0, true);