我正在提到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事件使用相同的代码。
我是仿制药的新手,所以需要专家的帮助。
答案 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