簡體   English   中英

如何修復Activator.CreateInstance失敗與MissingMethodException“未找到類型的構造函數”?

[英]How to fix Activator.CreateInstance failing with MissingMethodException “Constructor on type not found”?

我正在嘗試使用以下內容創建自定義用戶控件:

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

找不到類型'[namespace] .Zones.ZoneReport'的構造函數。

如何創建ZoneReport的ZoneReport

new { vmItem }應該是new object[]{ vmItem }

目前,您使用匿名類型作為第二個參數調用Activator.CreateInstance ,而不是參數數組。

由於第二個參數(對於你想要的重載)實際上是一個params參數,你也可以只使用普通的vmItem ,編譯器將生成數組:

 var zr = (THeader)Activator.CreateInstance(typeof(THeader), vmItem);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM