Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在将SqlDataType强制转换为C#Enum_C#_Sql_Design Patterns_Enums - Fatal编程技术网

正在将SqlDataType强制转换为C#Enum

正在将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

这是自动进行1-1 Table.Column-Class.Property匹配过程的一部分。我试图涵盖每一种可能的基本类型的基础。我越来越多地使用ORM,但现在我又回到了一个环境中,他们在那里做
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));
}