如何使这段代码通用?

时间:2010-11-01 10:05:44

标签: c# entity-framework generics

我正在提到here中的实体框架4中的ENUM包装器POCO类。我已经为枚举创建了包装器,如下所示

public class PriorityWrapper
    {
        private gender _t;
        public int Value
        {
            get
            {
                return (int)_t;
            }
            set
            {
                _t = (gender)value;
            }
        }
        public gender EnumValue
        {
            get
            {
                return _t;
            }
            set
            {
                _t = value;
            }
        }

        public static implicit operator PriorityWrapper(gender p)
        {
            return new PriorityWrapper { EnumValue = p };
        }

        public static implicit operator gender(PriorityWrapper pw)
        {
            if (pw == null) return gender.Male;
            else return pw.EnumValue;
        }
    }

但如上所述,除了性别之外,我还有其他ENUM。我可以在这里使用泛型,因此我可以对所有ENUM事件使用相同的代码。

我是仿制药的新手,所以需要专家的帮助。

2 个答案:

答案 0 :(得分:1)

您不能将枚举用作通用约束,而是可以使用。

 public  class EnumWrapper<T>
    {
        public static int Num = 1;
        private T _t;

        public T EnumValue
        {
            get
            {
                return _t;
            }
            set
            {
                _t = value;
            }
        }

        public void Assign<U>(U inn) where U : struct, T
        {
            if (typeof(T).IsEnum)
            {
                EnumValue = inn;
            }


        }
    }

并像这样调用它

           var agen = new EnumWrapper<gender>();
            gender g=new gender() ;
            agen.Assign (g);

编辑: Assign()是一种虚拟方法。我的目的是展示如何使用枚举作为通用约束。

答案 1 :(得分:0)

无法使用通用转换运算符。因此,上述代码不能具有完全相同的通用等价物。此外,人们不能提到枚举作为泛型类型约束,因此在属性实现中进行转换也是不可能的(或者可能需要一些其他约束(可能是接口)来工作,这可能导致装箱/取消装箱)。简而言之,IMO具有合理性能的通用解决方案可能并不可行。

我建议您尝试使用代码生成(查看T4模板)来创建包装类。 T4非常简单 - 请参考这里的几个链接:http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx