Конвертировать enum?к инт?не удается при использовании отражения - PullRequest
0 голосов
/ 26 апреля 2018

Это успешно при использовании int? для преобразования.
Ошибка при использовании отражения для преобразования.
Как я могу присвоить значение enum? свойству int? успешно с помощью отражения?

static void Main(string[] args)
{
    Dc dc = new Dc { Solution = Solution.Upgrade };

    Model model = new Model {  };

    //assign by reflection
    var psolution = model.GetType().GetProperty("Solution");
    //psolution.SetValue(model, dc.Solution); //this fail
    model.Solution = (int?)dc.Solution; //this success
    psolution.SetValue(model, Convert.ChangeType(dc.Solution, psolution.PropertyType)); //this fail
}

class Dc
{
    public Solution? Solution { get; set; }
}

class Model
{
    public int? Solution { get; set; }
}

enum Solution
{
    Upgrade = 1,
    Discard = 2,
}

1 Ответ

0 голосов
/ 26 апреля 2018

Попробуйте это:

Type t = Nullable.GetUnderlyingType(psolution.PropertyType) ?? psolution.PropertyType;
object safeValue = (dc.Solution == null) ? null : Convert.ChangeType(dc.Solution, t);
property.SetValue(model, safeValue, null);

Вам необходимо получить базовый параметр типа Nullable<T>, чтобы установить значение для int?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...