C#:如何工作:单位myUnit=5;

C#:如何工作:单位myUnit=5;,c#,struct,typeconverter,C#,Struct,Typeconverter,我刚注意到你可以用C来做这个: 不必这样做: Unit myUnit = new Unit(5); 有人知道我如何用自己的结构实现这一点吗?我查看了带有reflector的Unit结构,注意到正在使用TypeConverter属性,但是,在为我的结构创建自定义类型转换器之后,我仍然无法让编译器允许这种方便的语法。您需要为接受Int32的类提供强制转换运算符。您需要提供从int到Unit的隐式转换运算符,如下所示: public struct Unit { // the co

我刚注意到你可以用C来做这个:

不必这样做:

Unit myUnit = new Unit(5);

有人知道我如何用自己的结构实现这一点吗?我查看了带有reflector的Unit结构,注意到正在使用TypeConverter属性,但是,在为我的结构创建自定义类型转换器之后,我仍然无法让编译器允许这种方便的语法。

您需要为接受Int32的类提供强制转换运算符。

您需要提供从int到Unit的隐式转换运算符,如下所示:

    public struct Unit
    {   // the conversion operator...
        public static implicit operator Unit(int value)
        {
            return new Unit(value);
        }
        // the boring stuff...
        private readonly int value;
        public int Value { get { return value; } }
        public Unit(int value) { this.value = value; }
    }

哦,总是有新的东西要学——真不敢相信我以前从未遇到过这种情况——还有一个“显式”演员阵容——工作原理相同,但打电话的人必须添加(单位);通常在存在数据丢失风险时使用(精度/范围/比例/等-例如float=>int),重载运算符非常强大,但在这样做时要小心:很容易生成代码,最终对维护程序员来说非常不可预测。在合适的时候使用它(例如单元机箱),但不要过度使用。(并且始终确保它有良好的文档记录!)哇。太棒了。我从来不知道那件事。你的规则。小修正:它实际上是一个转换运算符(见MS规范中的10.10.3)
    public struct Unit
    {   // the conversion operator...
        public static implicit operator Unit(int value)
        {
            return new Unit(value);
        }
        // the boring stuff...
        private readonly int value;
        public int Value { get { return value; } }
        public Unit(int value) { this.value = value; }
    }