Приведение SqlDataType к C # Enum - PullRequest
2 голосов
/ 23 ноября 2010

Это часть процесса автоматического сопоставления 1-1 Table.Column-Class.Property.Я пытаюсь охватить базы для каждого возможного типа базы как , перечисленное здесь .Я работаю с ORM все больше и больше, но теперь я вернулся к среде, где они делают Id = row["Id"] as int, но вместо того, чтобы использовать этот метод грубой силы, я просто использовал атрибуты в свойствах, чтобы я мог написатьDataTable.ExtractAs<MyClass>, который пытается создать, и IList<MyClass> на основе этих атрибутов.

Мои вопросы: есть ли лучший способ обработки преобразования типов из SqlDataType в перечисление C #, охватывающее все целые типы?

Прямо сейчас я делаю это:

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;
    }
}

Это перебор?Есть лучший способ сделать это?Я не вижу ни одного члена в PropertyInfo, который бы обращался к этим целым типам.

1 Ответ

2 голосов
/ 23 ноября 2010

Вы можете использовать Enum.ToObject(object), который будет обрабатывать преобразование из SByte, Byte, Int16, UInt16, Int32, UInt32, Int64 и UInt64 в перечисление:

if (propertyType.IsEnum) {
    property.SetValue(Enum.ToObject(value));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...