首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到类型“GTS.CSVImport_HR_Standard”上的构造函数

找不到类型“GTS.CSVImport_HR_Standard”上的构造函数
EN

Stack Overflow用户
提问于 2015-02-24 20:53:55
回答 2查看 29关注 0票数 0

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

代码语言:javascript
复制
public class CSVImport_HR_Standard : CSVImport
{
    int fPropertyID;

    public CSVImport_HR_Standard()
    {
    }

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

和父类:

代码语言:javascript
复制
public class CSVImport
{

没有任何构造函数。

类是从以下方法调用的:

代码语言:javascript
复制
    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);
    }

哪里

代码语言:javascript
复制
pCommandClass = GTS.CSVImport_HR_Standard

但我得到以下错误:

代码语言:javascript
复制
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.

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

根据我所读到的,我最好的猜测是它与这句话有关:

代码语言:javascript
复制
    object oObject = Activator.CreateInstance(Type.GetType("GTS." + pCommandClass), oActivationParams);

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

EN

回答 2

Stack Overflow用户

发布于 2015-02-24 21:03:13

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

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

代码语言:javascript
复制
object oObject = Activator.CreateInstance( Type.GetType("GTS." + pCommandClass)
                                         , oActivationParams.ToArray()
                                         );

此外,请确保使用if (!string.IsNullOrEmpty(pActivationParams))而不是if (pActivationParams != "")

票数 1
EN

Stack Overflow用户

发布于 2015-02-24 21:39:16

问题是它将数组转换为参数列表,并逐个传递它们。

为了解决这个问题,我对构造函数执行了以下操作:

代码语言:javascript
复制
    public CSVImport_HR_Standard(params object[] oActivationParams)
    {
        this.fPropertyID = Convert.ToInt32(oActivationParams[0]);
    }

并按如下方式传入:

代码语言:javascript
复制
 object oObject = Activator.CreateInstance(Type.GetType("GTS." + pCommandClass), oActivationParams.ToArray());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28696364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档