Propertyinfo Target Exception对象上的SetValue与目标类型错误不匹配

时间:2014-11-19 10:50:30

标签: c#

我试图为某个属性设置一个值,但我得到一个"目标异常对象始终不匹配目标类型错误"。

属性类

class WizardProperties
{
    public int IncIncidentType { get; set; }
}

我尝试设置属性值

的代码段
 public void _wizardControl_NextButtonClick(object sender, WizardCommandButtonClickEventArgs e)
    {
        foreach (Control c in e.Page.Controls)
        {
            WizardProperties props = new WizardProperties();
            SearchLookUpEdit slue = new SearchLookUpEdit();
               foreach (var property in props.GetType().GetProperties())
               {
                   if (!(c is Label))
                   {
                       if (property.Name == c.Name)
                       {
                           MessageBox.Show("Matchhh!!");

                           if (c is SearchLookUpEdit)
                           {
                              slue = (SearchLookUpEdit)c;
                           }
                           PropertyInfo info = props.GetType().GetProperty(property.Name);

                           int type = Convert.ToInt32(slue.EditValue);

                           info.SetValue(property,type,null);

                       }
                   }
               }
         }

    }

属性在单独的类中声明,错误发生在:info.SetValue(property,type,null)。我添加了null作为第三个参数(在搜索此错误时找到了解决方案),但这对我没有用。类型变量具有有效的int。 如何修复setValue行?

编辑: 只需更改

 info.SetValue(property,type,null);

 info.SetValue(props,type,null);

修正了错误

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试在PropertyInfo对象上设置表示要设置的属性的属性值,而不是在props上设置该类的实例。您还在循环浏览PropertyInfo的属性时第二次检索props,因此我已将其删除。我也假设一旦你使这个代码工作,你实际上将使用props做一些事情。请尝试以下。:

foreach (Control c in e.Page.Controls)
{
    WizardProperties props = new WizardProperties();
    SearchLookUpEdit slue = new SearchLookUpEdit();
    foreach (var property in props.GetType().GetProperties())
    {
        if (!(c is Label) && property.Name == c.Name)
        {
             MessageBox.Show("Matchhh!!");

             if (c is SearchLookUpEdit)
             {
                 slue = (SearchLookUpEdit)c;
             }

             int type = Convert.ToInt32(slue.EditValue);

             property.SetValue(props,type,null);
         }
     }
 }