Доступ к bools модельного класса через отражение и доступ к их значениям

У меня есть модельный класс:

using System;
using System.Collections.Generic;

namespace UserManagement.Models
{
    public partial class ComBox
    {
        public int FkSystem { get; set; }
        public int FkUsers { get; set; }
        public bool? Pkw { get; set; }
        public bool? Trpv { get; set; }
        public bool? Trcv { get; set; }
        public bool? Lkw { get; set; }
        public bool? Smart { get; set; }
        public bool? Itresponsible { get; set; }
        public bool? DealerPrincipalSales { get; set; }
        public bool? SalesManager { get; set; }
        public bool? SalesAdministrator { get; set; }
         .
         .
         .    
        public virtual Systems FkSystemNavigation { get; set; }
        public virtual Users FkUsersNavigation { get; set; }
    }
}

Теперь я должен установить флажок для каждого bool в PDF-документе, который я генерирую. Моя проблема: у меня есть не только один класс модели, но и 30. Я бы хотел автоматически выполнять итерации по каждой модели, извлекать логические значения и ставить флажок, в зависимости от значения bool.

ComBox cfgItem = (ComBox)cfgList[cl.FkID];

IEnumerable<PropertyInfo> Cfg = cfgItem.GetType()
   .GetProperties()
   .Where(p => p.PropertyType == typeof(bool?));

foreach (PropertyInfo b in Cfg) 
{
   if ( (Nullable<bool>)b.GetValue(b, null) == true)                                  
      form.GetField(cl.Systemname+"_"+b.Name).SetValue("Yes");
}

Для строки if система выдает мне следующую ошибку:

System.Reflection.TargetException HResult = 0x80131603
Сообщение = Объект не соответствует типу цели.

Есть идеи, как я могу устранить эту ошибку?

Всего 2 ответа


Этот бит неверен:

b.GetValue(b, null)

b является PropertyInfo . Параметр, который вы передаете в GetValue должен быть экземпляром объекта для получения значения, в вашем случае cfgItem . Вам не нужно передавать второй параметр:

b.GetValue(cfgItem);

Есть ли шанс динамически привести запись cfgList к исходному типу? Потому что я сказал, что у меня есть несколько cfgItems, каждый из которых имеет свои логические значения с индивидуальными именами.

    GoodwillPkw cfgGodwill = new GoodwillPkw();
    ComBox cfgComBox = new ComBox();
    Saba cfgSaba = new Saba();
    ConnectMe cfgConnectMe = new ConnectMe();
    Cesar cfgCesar = new Cesar();
    Otb cfgOtb = new Otb();
    Vamos cfgVamos = new Vamos();
    Vision cfgVision = new Vision();
    Milesweb cfgMilesWeb = new Milesweb();
    Compass cfgCompass = new Compass();
    Dims cfgDims = new Dims();
    Cors cfgCors = new Cors();
    Eva cfgEva = new Eva();
    Ewa cfgEwa = new Ewa();
    GfKecho cfgGfK = new GfKecho();
    ICon cfgiCon = new ICon();
    Starorder cfgStarorder = new Starorder();
    Tips cfgTips = new Tips();
    Webparts cfgWebparts = new Webparts();
    XentryFlash cfgXentryFlash = new XentryFlash();
    XentryPortal cfgXentryPortal = new XentryPortal();

Позже я поместил их все в хеш-таблицу cfgList:

cfgList.Add(7, cfgComBox);

Затем в приведенном выше коде я делаю это для каждого элемента в хеш-таблице:

 ComBox cfgItem = (ComBox)cfgList[cl.FkID];

Есть ли шанс получить тип cfgItem и привести его соответственно в зависимости от его типа?


Есть идеи?

10000