Неверное приведение из System.Int32 к Nullable в случае свойств Enum - PullRequest
0 голосов
/ 23 марта 2020

У меня есть следующий метод stati c:

public static cols Parse(string[] inCols, int[] dat)
    {
        cols c = new cols();
        PropertyInfo[] properties = typeof(cols).GetProperties();
        for (int i = 0; i < inCols.Length; i++)
        {
            PropertyInfo prop = properties.Single(a => a.Name == inCols[i]);
            var t = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
            var safeValue = Convert.ChangeType(dat[i], t);
            prop.SetValue(c, safeValue);
        }
        return c;
    }

Здесь свойства класса "cols" являются обнуляемыми типами Enum. У метода есть два входящих параметра (inCols и dat). InCols содержит имена свойств в виде строки, а данные - их значения как int. Задача метода состоит в том, чтобы на основе имени метода он назначал правильные значения типу nullable enum. Я получаю следующее сообщение об ошибке: System.InvalidCastException: 'Invalid cast from 'System.Int32' to '<my enum type>'.'

Это странно, потому что значение должно быть 0, что хорошо для enum, потому что это его первое значение.

Любой из вас есть идеи?

Спасибо! Габор

1 Ответ

0 голосов
/ 24 марта 2020

Поскольку вы имеете дело только с Enums, вы можете просто изменить свой код так:

var safeValue = Enum.ToObject(t, dat[i]);
...