类型' GTS.CSVImport_HR_Standard'上的构造函数未找到

时间:2015-02-24 12:53:55

标签: c#

我有以下C#类和2个构造函数:

public class CSVImport_HR_Standard : CSVImport
{
    int fPropertyID;

    public CSVImport_HR_Standard()
    {
    }

    public CSVImport_HR_Standard(string oActivationParams)
    {
        this.fPropertyID = Convert.ToInt32(oActivationParams);
    }

父类:

public class CSVImport
{

没有任何构造函数。

通过以下方法调用该类:

    private object CreateCommandClassInstance(string pCommandClass, string pActivationParams.ToArray())
    {
        List<object> oActivationParams = new List<object>();
        // In the current implementation we assume only one param of type int
        if (pActivationParams != "")
        {
            Int32 iParam = Convert.ToInt32(pActivationParams);

            oActivationParams.Add(iParam);
        }


        object oObject = Activator.CreateInstance(Type.GetType("GTS." + pCommandClass), oActivationParams);

        return(oObject);
    }

哪里

pCommandClass = GTS.CSVImport_HR_Standard

但是我收到以下错误:

Constructor on type 'GTS.CSVImport_HR_Standard' not found. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.MissingMethodException: Constructor on type 'GTS.CSVImport_HR_Standard' not found.

据我所知,构造函数是正确的,它传递了所有正确的参数,为什么它会给我这个错误?

根据我的阅读,我最好的猜测是它与线路有关:

    object oObject = Activator.CreateInstance(Type.GetType("GTS." + pCommandClass), oActivationParams);

但我不确定是什么原因导致问题,因为构造函数似乎是正确的?

2 个答案:

答案 0 :(得分:1)

您的主要问题是在List<object>方法中使用CreateInstance作为第二个参数。这使得该方法搜索具有签名(List<object>)的构造函数,而不是内部元素的类型。

你必须调用ToArray才能调用该方法的正确重载(它现在调用:

object oObject = Activator.CreateInstance( Type.GetType("GTS." + pCommandClass)
                                         , oActivationParams.ToArray()
                                         );

另外,请务必使用if (!string.IsNullOrEmpty(pActivationParams))代替if (pActivationParams != "")

答案 1 :(得分:0)

问题在于它将数组转换为参数列表并将它们单独传递。

要解决我使用构造函数执行以下操作:

    public CSVImport_HR_Standard(params object[] oActivationParams)
    {
        this.fPropertyID = Convert.ToInt32(oActivationParams[0]);
    }

并传递如下:

 object oObject = Activator.CreateInstance(Type.GetType("GTS." + pCommandClass), oActivationParams.ToArray());