Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当类型(…)具有构造函数时,找不到该类型的构造函数_C#_Reflection - Fatal编程技术网

C# 当类型(…)具有构造函数时,找不到该类型的构造函数

C# 当类型(…)具有构造函数时,找不到该类型的构造函数,c#,reflection,C#,Reflection,我试图找到所有具有自定义属性ToolTestAttribute的类,并实例化该类的一个实例。当代码尝试运行构造函数时,它报告找不到构造函数类型 我要开始的课程是这样的: public AllComponentsConstrained(ITool toolFile) { tool = toolFile; } List<object> StartTests(Assembly assem, ITool tool) {

我试图找到所有具有自定义属性ToolTestAttribute的类,并实例化该类的一个实例。当代码尝试运行构造函数时,它报告找不到构造函数类型

我要开始的课程是这样的:

    public AllComponentsConstrained(ITool toolFile) 
    {
        tool = toolFile;
    }
        List<object> StartTests(Assembly assem, ITool tool)
    {
        List<object> result = new List<object>();
        foreach (Type type in assem.GetTypes())
        {
            if (type.GetCustomAttributes(typeof(ToolTestAttribute), true).Length > 0)
            {
                List<ITool> args = new List<ITool>();
                args.Add(tool);
                result.Add(Activator.CreateInstance(type, args));
            }
        }
        return result;
    }
查找具有所需属性的类的代码如下所示:

    public AllComponentsConstrained(ITool toolFile) 
    {
        tool = toolFile;
    }
        List<object> StartTests(Assembly assem, ITool tool)
    {
        List<object> result = new List<object>();
        foreach (Type type in assem.GetTypes())
        {
            if (type.GetCustomAttributes(typeof(ToolTestAttribute), true).Length > 0)
            {
                List<ITool> args = new List<ITool>();
                args.Add(tool);
                result.Add(Activator.CreateInstance(type, args));
            }
        }
        return result;
    }
我的参数列表有一个正确类型的元素。 这里可能有什么问题?

您正在调用重载

这需要传递构造函数参数的对象数组。您的构造函数需要一个ITool,但您试图将列表作为第一个参数传递

或者:

Activator.CreateInstance(type, tool)
或:

你在叫超载

这需要传递构造函数参数的对象数组。您的构造函数需要一个ITool,但您试图将列表作为第一个参数传递

或者:

Activator.CreateInstance(type, tool)
或:

不接受列表参数,但接受数量可变的对象params object[]

因此,您的代码尝试调用一个构造函数,该构造函数接受一个不存在的列表

将其更改为:Activator.CreateInstancetype,tool

不接受列表参数,而是接受数量可变的对象params object[]

因此,您的代码尝试调用一个构造函数,该构造函数接受一个不存在的列表

将其更改为:Activator.CreateInstancetype,tool

您正在使用的CreateInstance方法采用类型和参数对象[];因为你给它一个列表而不是数组,你本质上是说找到一个具有列表参数的构造函数

请尝试:

object[]args=新对象[]{tool}; result.AddActivator.CreateInstancetype,args; 或者更简单,让编译器来处理它:

result.AddActivator.CreateInstancetype,工具; 您正在使用的CreateInstance方法接受一个类型和一个params对象[];因为你给它一个列表而不是数组,你本质上是说找到一个具有列表参数的构造函数

请尝试:

object[]args=新对象[]{tool}; result.AddActivator.CreateInstancetype,args; 或者更简单,让编译器来处理它:

result.AddActivator.CreateInstancetype,工具; 您将列表作为第一个参数传递,而不是ITool。请尝试以下方法:

Activator.CreateInstance(type, tool);
您正在调用的CreateInstance重载是一个params对象[]args,因此您正在尝试将List作为第一个参数传递。

您将List作为第一个参数传递,而不是ITool。请尝试以下方法:

Activator.CreateInstance(type, tool);

您正在调用的CreateInstance重载是一个params对象[]args,因此您所做的是尝试将List作为第一个参数传递。

我想我会给出第一张海报的答案,因为四张海报都说了相同的基本内容。所以我抓到了错误的激活器。实例重载。因此,如果我有一个接受多个参数的构造函数,我想我会使用数组?@EricSnyder你抓住了正确的重载-你只是错过了不能传递参数列表的机会。要么一个接一个地传递参数,而不使用数组或列表等包装参数,要么传递参数的对象[]。Activator.CreateInstance不知道如何解释论点列表我想我会给出第一张海报的答案,因为四张海报都说了相同的基本内容。所以我抓到了错误的激活器。实例重载。因此,如果我有一个接受多个参数的构造函数,我想我会使用数组?@EricSnyder你抓住了正确的重载-你只是错过了不能传递参数列表的机会。要么一个接一个地传递参数,而不使用数组或列表等包装参数,要么传递参数的对象[]。Activator.CreateInstance不知道如何解释参数列表