受到F#中的度量单位的启发,尽管断言(这里)你无法用C#做到这一点,但我还有一个想法,那就是我一直在玩的.
namespace UnitsOfMeasure
{
public interface IUnit { }
public static class Length
{
public interface ILength : IUnit { }
public class m : ILength { }
public class mm : ILength { }
public class ft : ILength { }
}
public class Mass
{
public interface IMass : IUnit { }
public class kg : IMass { }
public class g : IMass { }
public class lb : IMass { }
} …Run Code Online (Sandbox Code Playgroud) 有没有人有机会深入了解F#计量单位的工作原理?它只是基于类型的chicanery,还是隐藏在其下的CLR类型可能(可能)从其他.net语言中使用?它适用于任何数值单位,还是仅限于浮点值(这是所有示例使用的)?
我有一个涉及许多现实世界单位的许多计算项目:
该项目涉及复杂而众多的计算公式.
这就是为什么我认为使用像Temperature,Distance ...... 这样的自定义类型可以提高代码的可读性.例如:
Temperature x = -55.3;
Meter y = 3;
Run Code Online (Sandbox Code Playgroud)
要么
var x = new Temperature(-55.3);
Run Code Online (Sandbox Code Playgroud)
我试图制作一个使用双内部值的Temperature类.
public class Temperature
{
double _Value = double.NaN;
public Temperature() { }
public Temperature(double v) {
_Value = v;
}
public static implicit operator Temperature(double v) {
return new Temperature(v);
}
}
Run Code Online (Sandbox Code Playgroud)
但是类可以为空.这意味着:
Temperature myTemp;
Run Code Online (Sandbox Code Playgroud)
是"正确的",将为空.我不想要这个.我不想使用结构,因为它们太有限了:
double _Value = double.Nan;来定义默认值(我的默认底层double值为NaN)我想知道是否有办法告诉C#:
Temperature myTemp = 23K; // C# does not implement …Run Code Online (Sandbox Code Playgroud)