C# 通过it动态调用/调用静态方法';姓名

C# 通过it动态调用/调用静态方法';姓名,c#,C#,我有当前的代码: public static OrderDraft ParseImportFile(Int32 TemplateId, String FTPUser, String CSVFilePath, Boolean IgnoreError = false) { // Init OrderDraft myOrderDraft = new OrderDraft(); // Anticipate Error try { // Load

我有当前的代码:

public static OrderDraft ParseImportFile(Int32 TemplateId, String FTPUser, String CSVFilePath, Boolean IgnoreError = false)
{
    // Init
    OrderDraft myOrderDraft = new OrderDraft();

    // Anticipate Error
    try
    {
        // Load Sync Template Info
        SyncTemplateInfo mySyncTemplateInfo = Utils.GetTemplateInfo(TemplateId, IgnoreError);

        // Switch On Selected Template
        switch (TemplateId)
        {
            // Template #1
            case 1:
                myOrderDraft = Parsers.Template1.Parse(FTPUser, CSVFilePath, mySyncTemplateInfo, IgnoreError);
                break;

            // Template #2
            case 2:
                myOrderDraft = Parsers.Template2.Parse(FTPUser, CSVFilePath, mySyncTemplateInfo, IgnoreError);
                break;
        }
    }
    catch { }

    // Finished
    return myOrderDraft;
}
其中,
Parsers
是文件夹/命名空间的名称
TemplateN
是类的名称

我想要能够做的是动态调用静态方法,而不是有一个切换案例,反复复制相同的代码(我可能会开发超过10个解析器)


你知道我怎样才能做到这一点吗?我看了一下,但我不确定如何为自己的代码做到这一点…

我希望以下内容可能会有所帮助

        string Parsers = "...";
        string TemplateN = "...";
        string MethodName = "...";

        var q = from t in Assembly.GetExecutingAssembly().GetTypes()
                where t.IsClass && t.Namespace == Parsers && t.Name == TemplateN
                select t;

        Type classType = null;

        foreach (var item in q)
        {
            classType = item;//select the first match
            break;
        }

        if (classType == null)
        {
            return; //no matched class
        }

        MethodInfo mf = classType.GetMethod(MethodName);

        if (mf  == null)
        {
            return; //no matched method
        }

        myOrderDraft = mf.Invoke(new object()/*Sender*/,new object[]{}/*parameters*/);

我也试过你的建议<代码>类类型为空。同上。