Неверное приведение из 'System.Int32' к Enum с использованием отражений - PullRequest
0 голосов
/ 21 октября 2019

У меня есть метод, который преобразует DataTable в List<T>. Он работал нормально, пока в моей базе данных MySql не было столбца bit. Не удалось преобразовать bit значение 1 в C# тип bool. Поэтому я попытался преобразовать его следующим образом:

Convert.ChangeType(value, prop.PropertyType);

, где value - это то, что возвращала база данных, и prop в PropertyInfo, где будет назначено value.

Работало нормальноно это не помогло, как были добавлены перечисления.

например, раньше я мог назначить целое число в поле перечисления, но теперь получаю ошибку

Неправильное приведение из 'System.Int32' к 'EnumsAndConstants.QuestionType '.

Я знаю, что одним из решений может быть преобразование value в тип только тогда, когда происходит TypeCastingException, но я не хочу, чтобы исключение происходило вообще. Есть ли конкретное решение, которое подходит для всех типов?

1 Ответ

1 голос
/ 21 октября 2019

Вы можете проверить prop.PropertyType.IsEnum в операторе if и использовать Enum.ToObject примерно так:

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