使用更改类名创建实例

时间:2017-10-02 16:11:08

标签: c# reflection

我想打几个像这样的测试。

        var test8001 = new Test8001();
        test8001.Execute(drv);
        var test8002 = new Test8002();
        test8002.Execute(drv);
        var test8007 = new Test8007();
        test8007.Execute(drv);

如何使用所有测试编号的int列表自动实例化所有测试函数?

        List<int> classNameNumbers = new List<int>() { 8001, 8002, 8007 };

我需要一个for循环,在每个实例上调用Execute()。

编辑: 类型的名称,例如应该从我的整数列表中检索'Test8001'。

1 个答案:

答案 0 :(得分:2)

试试以下

namespace Stackoverflow46529447
{
    class Program
    {
        static void Main(string[] args)
        {
            var drv = new Drv();

            var numbers = new[] {8001, 8002, 8003};
            var executables = numbers.Select(x => Activator.CreateInstance(Type.GetType($"Stackoverflow46529447.Test{x:0000}")))
                .OfType<IExecutable>()
                .ToArray();

            foreach (var executable in executables)
            {
                executable.Execute(drv);
            }
        }
    }

    public class Test8001 : IExecutable
    {
        public void Execute(Drv drv)
        {
            Console.WriteLine("Hello from Test 8001");
        }
    }

    public class Test8002 : IExecutable
    {
        public void Execute(Drv drv)
        {
            Console.WriteLine("Hello from Test 8002");
        }
    }

    public class Test8003 : IExecutable
    {
        public void Execute(Drv drv)
        {
            Console.WriteLine("Hello from Test 8003");
        }
    }

    public interface IExecutable
    {
        void Execute(Drv drv);
    }

    public class Drv
    {

    }
}

这使用反射来创建实例类型。