gpt4 book ai didi

c# - 如何修复 Activator.CreateInstance 因 MissingMethodException "Constructor on type not found"而失败?

转载 作者:行者123 更新时间:2023-11-30 13:48:54 24 4
gpt4 key购买 nike

我正在尝试使用以下内容创建自定义用户控件:

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 而失败:

Constructor on type '[namespace].Zones.ZoneReport' not found.

如何创建 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com