C# 反射返回对象中的SetValue与目标类型不匹配

C# 反射返回对象中的SetValue与目标类型不匹配,c#,.net,reflection,C#,.net,Reflection,我在一个具有多个属性的类中循环,并搜索具有相同ID的任何文本框。如果存在匹配项,则我希望将属性值更新为文本框值的属性值,但我遇到以下错误: 对象与目标类型不匹配 代码如下: foreach (var prop in contactInfo.GetType().GetProperties()) { var ctrl = WizardCampaign.FindControl(prop.Name) ?? P

我在一个具有多个属性的类中循环,并搜索具有相同ID的任何文本框。如果存在匹配项,则我希望将属性值更新为文本框值的属性值,但我遇到以下错误:

对象与目标类型不匹配

代码如下:

foreach (var prop in contactInfo.GetType().GetProperties())                    
{                        
    var ctrl = WizardCampaign.FindControl(prop.Name) ?? Page.Master.FindControl(prop.Name);        

    if (ctrl != null)
    {
        if (ctrl.GetType() == typeof(TextBox))
        {
            var r = (TextBox)ctrl;                                                                                                                                                                                             
            prop.SetValue(prop, r.Text, null);                                
        }
    }
}
看这里:

prop.SetValue(prop, r.Text, null);
SetValue应该将要更改的对象作为第一个参数,但您正在传递PropertyInfo对象。我相信您的实际代码应该是:

prop.SetValue(contactInfo, r.Text, null); 
看这里:

prop.SetValue(prop, r.Text, null);
SetValue应该将要更改的对象作为第一个参数,但您正在传递PropertyInfo对象。我相信您的实际代码应该是:

prop.SetValue(contactInfo, r.Text, null); 
而不是ifctrl!=null,如果ctrl.GetType==typeofTextBox,则可以组合它们,并使用ifctrl is textbox而不是ifctrl!=null,如果ctrl.GetType==typeofTextBox,则可以组合它们,并使用ifctrl is textbox包含从textbox派生的对象