自己的一个解决方案,能解决,就是太麻烦了。如果有多个操作结果类关联多少个枚举,就要复制代码等等。public enum ResultCode
{
    Success,
    Failed
}public abstract class OperationResult<TStatus>
    where TStatus : struct
{
    public abstract TStatus Status { get; set; }    public abstract int? StatusCode { get; set; }
}public class OperationResult : OperationResult<ResultCode>
{
    public override ResultCode Status
    {
        get { return (ResultCode)StatusCode.Value; }
        set
        {
            StatusCode = (int)value;
            Status = value;
        }
    }    public override int? StatusCode
    {
        get { return (int)Status; }
        set
        {
            Status = (ResultCode)value.Value;
            StatusCode = value;
        }
    }
}

解决方案 »

  1.   

    上面有问题,进入死循环。修正一下。
    public enum ResultCode
    {
        Success,
        Failed
    }public abstract class OperationResult<TStatus>
        where TStatus : struct
    {
        public abstract TStatus Status { get; set; }    public abstract int? StatusCode { get; set; }
    }public class OperationResult : OperationResult<ResultCode>
    {
        private ResultCode m_Status;
        private int? m_StatusCode;    public override ResultCode Status
        {
            get { return (ResultCode)m_StatusCode.Value; }
            set
            {
                m_StatusCode = (int)value;
            }
        }    public override int? StatusCode
        {
            get { return (int)m_Status; }
            set
            {
                m_Status = (ResultCode)value.Value;
            }
        }
    }
      

  2.   

    可以用(TStatus)(object)StatusCode.Value来转换,也可以用Enum.ToObject。
    public class OperationResult<TStatus> where TStatus : struct
    {
        static OperationResult()
        {
            Type t = typeof(TStatus);
            if (!t.IsEnum || Enum.GetUnderlyingType(t) != typeof(int)) throw new NotSupportedException("TStatus must be an enum");
        }    public int val = 2;
        public TStatus Status
        {
            get { return (TStatus)Enum.ToObject(typeof(TStatus), val); }
            set { val = Convert.ToInt32(value); }
            //get { return (TStatus)(object)val; }
            //set { val = (int)(object)value; }
        }
    }
      

  3.   

    这样的代码我实现过,但是效率不敢恭维。是重载的1/600,还是谢谢你。而且约束里面加个IConvetion更好,直接value.ToInt32(),我是试过的。