类型(...)具有构造函数时找不到该构造函数

时间:2020-03-13 16:11:36

标签: c# reflection

我正在尝试查找具有自定义属性“ 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;
    }

ToolTestAttribute代码:

using System;
using System.Reflection;

namespace Sharpline.SL24.ToolingAddIn.Attributes
{
[AttributeUsage(AttributeTargets.Class)]
class ToolTestAttribute : Attribute
{
    public string Target;
    public string Name;

        public ToolTestAttribute(string testTarget, string testName)
        {
            Target = testTarget;
            Name = testName;
        }

    }
}

我的参数列表只有一个正确类型的元素。 这里可能出什么问题了?

4 个答案:

答案 0 :(得分:4)

您正在呼叫Activator.CreateInstance(Type, params object[])重载。

这需要传递构造函数参数的对象数组。您的构造函数期望使用ITool,但是您试图将List<ITool>作为第一个参数。

可以:

Activator.CreateInstance(type, tool)

或者:

object[] args = new object[] { tool };
Activator.CreateInstance(type, args);

答案 1 :(得分:2)

您使用的CreateInstance方法有一个Type和一个params object[];因为您要给它一个 list (不是数组),所以您实际上是在说“找到一个参数为列表的构造函数”。

尝试:

object[] args = new object[] { tool };
result.Add(Activator.CreateInstance(type, args));

或更简单,让编译器处理它:

result.Add(Activator.CreateInstance(type, tool));

答案 2 :(得分:1)

Activator.CreateInstance不采用List<ITool>参数,而是可变数量的对象(params object[])。

因此,您的代码尝试调用采用List<ITool>不存在的构造函数。

将其更改为:Activator.CreateInstance(type, tool)

答案 3 :(得分:1)

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

Activator.CreateInstance(type, tool);

您正在调用的CreateInstance的重载是params object[] args,因此您正在尝试将List<ITool>作为第一个参数传递。

相关问题