有没有办法为枚举成员分配数据类型;例如;
public enum CarPartEnum
{
[string]
Color,
[int]
Speed
}
我为什么要这样做?因为它在数据库中的记录方式,有一个 CarProperties 表。并且表中有一个键值对。
键:颜色,值:红色;键:速度,值:250
因此,当我从数据库中读取它时,我想将键转换为 CarPartEnum 并将值转换为正确的数据类型。
不。
所有enum
类型都基于整数类型。您不能将类型分配给特定的枚举成员。
参见Enum Class
MSDN:
枚举是一组命名常量,其基础类型是任何整数类型。如果没有显式声明基础类型,则使用 Int32。Enum 是 .NET Framework 中所有枚举的基类。
您可以使用属性为成员提供额外的元数据,但您需要使用反射才能使用这些属性。
但是,根据您的描述,您可能需要一个自定义类来反映数据库中的内容。
public class CarPart
{
public string Color { get; set; }
public int Speed { get; set; }
}
也许像这样的自定义属性:
public class MyTypeAttribute : Attribute
{
private readonly Type Type;
public MyTypeAttribute (Type type)
{
Type = type;
}
public override string ToString()
{
return Type.ToString();
}
}
并像这样使用它:
public enum CarPartEnum
{
[MyType(typeof(string))]
Color,
[MyType(typeof(int))]
Speed
}
但我同意 Oded 的回答,即您应该使用反映数据库的自定义类。
您可以创建一个自定义属性,可分配给将具有 type 属性的成员。包括如何访问它。
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
public class FieldTypeAttribute : Attribute
{
public FieldTypeAttribute(Type type)
{
Type = type;
}
public Type Type { get; set; }
}
public static class FieldTypeInfo<TEnum> where TEnum : struct
{
public static readonly IDictionary<TEnum, FieldTypeAttribute> Types;
static FieldTypeInfo()
{
var enumTypes = from e in Enum.GetValues(typeof (TEnum)).Cast<TEnum>()
join m in typeof (TEnum).GetFields(BindingFlags.Public | BindingFlags.Static)
on e.ToString() equals m.Name
let i = m.GetCustomAttributes().OfType<FieldTypeAttribute>().SingleOrDefault()
select new {e, i};
Types = enumTypes.ToDictionary(es => es.e, es => es.i);
}
}