正在将SqlDataType强制转换为C#Enum
这是自动进行1-1 Table.Column-Class.Property匹配过程的一部分。我试图涵盖每一种可能的基本类型的基础。我越来越多地使用ORM,但现在我又回到了一个环境中,他们在那里做正在将SqlDataType强制转换为C#Enum,c#,sql,design-patterns,enums,C#,Sql,Design Patterns,Enums,这是自动进行1-1 Table.Column-Class.Property匹配过程的一部分。我试图涵盖每一种可能的基本类型的基础。我越来越多地使用ORM,但现在我又回到了一个环境中,他们在那里做Id=row[“Id”]作为int,但我没有使用暴力强制转换的方式,而是在属性上使用属性,这样我就可以编写DataTable.ExtractAs,它尝试基于这些属性创建和IList 我的问题是:有没有更好的方法来处理从SqlDataType到覆盖所有整数类型的C#enum的转换 现在我正在这样做: int
Id=row[“Id”]作为int
,但我没有使用暴力强制转换的方式,而是在属性上使用属性,这样我就可以编写DataTable.ExtractAs
,它尝试基于这些属性创建和IList
我的问题是:有没有更好的方法来处理从SqlDataType到覆盖所有整数类型的C#enum的转换
现在我正在这样做:
internal static bool TrySetValue<T>(T t, PropertyInfo property, DataRow row, string columnName)
{
Type propertyType = property.PropertyType;
// other logic and unique cases
if (propertyType.IsEnum
&& Enum.GetUnderlyingType(propertyType) == value.GetType())
{
property.SetValue(t, value, null);
return true;
}
}
内部静态bool TrySetValue(T,PropertyInfo属性,DataRow行,string列名称)
{
类型propertyType=property.propertyType;
//其他逻辑和独特案例
if(propertyType.IsEnum
&&Enum.getUnderlineType(propertyType)==value.GetType()
{
SetValue(t,value,null);
返回true;
}
}
这是不是太过分了?有更好的方法吗?我在
PropertyInfo
中没有看到任何成员处理这些整数类型。您可以使用Enum.ToObject(object)
,它将处理从SByte
、Byte
、Int16
、UInt16
、Int32
、UInt32
、UInt32
的转换,Int64
和UInt64
到枚举:
if (propertyType.IsEnum) {
property.SetValue(Enum.ToObject(value));
}