C#用于字段单位转换的隐式get

C#用于字段单位转换的隐式get,c#,attributes,implicit,C#,Attributes,Implicit,我希望为我的车间系统正确处理给定值(例如双精度)的装置 在数据库中,它是全局配置的,实际使用的是哪个单元。基本单位由全局配置设置 现在我喜欢从模型中获取值的最隐式方法 我想避免的是以下几点: public class BadWay { private double _width; public double Width { get { return LengthConverter.Convert(_width,

我希望为我的车间系统正确处理给定值(例如双精度)的装置

在数据库中,它是全局配置的,实际使用的是哪个单元。基本单位由全局配置设置

现在我喜欢从模型中获取值的最隐式方法

我想避免的是以下几点:

    public class BadWay
    {
        private double _width;
        public double Width
        {
           get { return LengthConverter.Convert(_width, GlobalConfig.LengthConversionFactor); }
           set { _width = value; }
        }
      }
我真正喜欢的是:

    [LengthUnit]
    public double Width { get; set; }

    [WeightUnit]
    public double Weight { get; set; }
在属性中,所有内容都被处理以进行转换。 我已经看到一个讨论,这是一个糟糕的方式


我真的很想知道你对此的想法/库/解决方案。

我认为这些都归结为设计原则。是的,你可以按照你的想法去做,但你最终还是会在一些转换中添加一个库或硬编码

设计的一个常见问题是,我们喜欢把事情过于简单化。你的属性可以被认为是双重的,但这不是真正的属性,它们是单位

然后,您可以为上面提到的每种类型的单元创建一个类

public LengthUnit Width { get; set; }

public WeightUnit Weight { get; set; }

每个Unit类都可以从一个接口继承,该接口提供您需要的任何东西,如Unit factor或转换为另一个Unit。

我认为这一切都可以归结为设计原则。是的,你可以按照你的想法去做,但你最终还是会在一些转换中添加一个库或硬编码

设计的一个常见问题是,我们喜欢把事情过于简单化。你的属性可以被认为是双重的,但这不是真正的属性,它们是单位

然后,您可以为上面提到的每种类型的单元创建一个类

public LengthUnit Width { get; set; }

public WeightUnit Weight { get; set; }

每个Unit类都可以从一个接口继承,该接口提供您所需的任何东西,如Unit factor或转换为另一个Unit。

这或多或少是PostSharp允许您做的事情。似乎您正在寻找的是面向方面的编程,它没有融入到C#中。也许您遗漏了一些东西,但是,我很难理解将双精度转换为双精度的用法。@Kevin我说的是单位。毫米到米或者类似的东西,这在你的帖子中并不明显。单位转换需要两条信息,输入值和输入单位。如果输入的单位与基本单位匹配,则无需转换。如果不是,则可以确定转换算法。要使用声明式处理,您需要将对象传递给转换器,转换器可以读取属性并确定应用哪种转换算法。这或多或少是PostSharp允许您做的。似乎您正在寻找的是面向方面的编程,它没有融入到C#中。也许您遗漏了一些东西,但是,我很难理解将双精度转换为双精度的用法。@Kevin我说的是单位。毫米到米或者类似的东西,这在你的帖子中并不明显。单位转换需要两条信息,输入值和输入单位。如果输入的单位与基本单位匹配,则无需转换。如果不是,则可以确定转换算法。要使用声明式处理,需要将对象传递给转换器,转换器可以读取属性并确定要应用的转换算法。