相关疑难解决方法(0)

C#中的度量单位 - 差不多

受到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)

c# f# units-of-measurement

57
推荐指数
5
解决办法
3万
查看次数

F#计量单位如何运作?

有没有人有机会深入了解F#计量单位的工作原理?它只是基于类型的chicanery,还是隐藏在其下的CLR类型可能(可能)从其他.net语言中使用?它适用于任何数值单位,还是仅限于浮点值(这是所有示例使用的)?

.net f# functional-programming units-of-measurement

17
推荐指数
2
解决办法
4486
查看次数

使用真实世界单位而不是类型

我有一个涉及许多现实世界单位的许多计算项目:

  • 距离;
  • 温度;
  • 流量;
  • ...

该项目涉及复杂而众多的计算公式.

这就是为什么我认为使用像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)

c# types units-of-measurement

10
推荐指数
2
解决办法
1997
查看次数