属性信息目标异常对象上的设置值与目标类型错误不匹配

本文关键字:目标 类型 错误 不匹配 设置 信息 异常 对象 属性 | 更新日期: 2023-09-27 18:31:01

我正在尝试为属性设置值,但收到"目标异常对象始终与目标类型不匹配错误"。

属性类

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。如何修复设置值行?

编辑:只是改变了

 info.SetValue(property,type,null);

 info.SetValue(props,type,null);

修复错误

属性信息目标异常对象上的设置值与目标类型错误不匹配

看起来您正在尝试在表示要设置的属性的PropertyInfo对象上设置属性的值,而不是在类的实例props上设置属性的值。在循环访问props的属性时,您还会第二次检索PropertyInfo,所以我删除了它。我还假设一旦你让这段代码工作,你实际上会对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);
         }
     }
 }