我正在尝试使用以下内容创建自定义用户控件:
var panel = new GenericAccordionPanel<ZoneReport, ZonesPanel, ZonesVM>(myVm.ZonesVm);
GenericAccordionPanel
定义为:public class GenericAccordionPanel<THeader, TBody, TViewModel> : UserControl
{
public Accordion Accordion { get; set; }
public GenericAccordionPanel(TViewModel vmItem)
{
this.Accordion = new Accordion();
//the constructor for ZoneReport(THeader) takes a ZonesVM (vmItem) as a parameter.
var zr = (THeader)Activator.CreateInstance(typeof(THeader), new { vmItem });
var exp = new Expander { Header = zr };
Accordion.Children.Add(exp);
base.Content = Accordion;
}
}
问题是
Activator.CreateInstance
失败并显示以下 MissingMethodException
:如何创建
ZoneReport
的实例? 最佳答案
new { vmItem }
应该是 new object[]{ vmItem }
。
目前您正在使用匿名类型作为第二个参数而不是参数数组调用 Activator.CreateInstance
。
由于第二个参数(对于你想要的重载)实际上是一个 params
参数,你也可以只使用普通的 vmItem
并且编译器将生成数组:
var zr = (THeader)Activator.CreateInstance(typeof(THeader), vmItem);
关于c# - 如何修复 Activator.CreateInstance 因 MissingMethodException "Constructor on type not found"而失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10796062/