Can we define implicit conversions of enums in c#?

前端 未结 13 2399
孤街浪徒
孤街浪徒 2020-11-30 18:37

Is it possible to define an implicit conversion of enums in c#?

something that could achieve this?

public enum MyEnum
{
    one = 1, two = 2
}

MyEnu         


        
13条回答
  •  忘掉有多难
    2020-11-30 18:48

    I created this utility to help me convert an Enum to PrimitiveEnum and PrimitiveEnum to byte, sbyte, short, ushort, int, uint, long, or ulong.

    So, this technically converts any enum to any its primitive value.

    public enum MyEnum
    {
        one = 1, two = 2
    }
    
    PrimitiveEnum number = MyEnum.one;
    long i = number;
    

    See commit at https://github.com/McKabue/McKabue.Extentions.Utility/blob/master/src/McKabue.Extentions.Utility/Enums/PrimitiveEnum.cs

    using System;
    
    namespace McKabue.Extentions.Utility.Enums
    {
        /// 
        /// 
        /// Can we define implicit conversions of enums in c#?
        /// 
        /// 
        public struct PrimitiveEnum
        {
            private Enum _enum;
    
            public PrimitiveEnum(Enum _enum)
            {
                this._enum = _enum;
            }
    
            public Enum Enum => _enum;
    
    
            public static implicit operator PrimitiveEnum(Enum _enum)
            {
                return new PrimitiveEnum(_enum);
            }
    
            public static implicit operator Enum(PrimitiveEnum primitiveEnum)
            {
                return primitiveEnum.Enum;
            }
    
            public static implicit operator byte(PrimitiveEnum primitiveEnum)
            {
                return Convert.ToByte(primitiveEnum.Enum);
            }
    
            public static implicit operator sbyte(PrimitiveEnum primitiveEnum)
            {
                return Convert.ToSByte(primitiveEnum.Enum);
            }
    
            public static implicit operator short(PrimitiveEnum primitiveEnum)
            {
                return Convert.ToInt16(primitiveEnum.Enum);
            }
    
            public static implicit operator ushort(PrimitiveEnum primitiveEnum)
            {
                return Convert.ToUInt16(primitiveEnum.Enum);
            }
    
            public static implicit operator int(PrimitiveEnum primitiveEnum)
            {
                return Convert.ToInt32(primitiveEnum.Enum);
            }
    
            public static implicit operator uint(PrimitiveEnum primitiveEnum)
            {
                return Convert.ToUInt32(primitiveEnum.Enum);
            }
    
            public static implicit operator long(PrimitiveEnum primitiveEnum)
            {
                return Convert.ToInt64(primitiveEnum.Enum);
            }
    
            public static implicit operator ulong(PrimitiveEnum primitiveEnum)
            {
                return Convert.ToUInt64(primitiveEnum.Enum);
            }
        }
    }
    

提交回复
热议问题