我正在尝试System.Type。在以下代码中,我在数组类型上使用了GetConstructors

using System;
using System.Reflection;

class Animal
{
    public Animal (string s)
    {
        Console.WriteLine(s);
    }
}

class Test
{
    public static void Main()
    {
        Type AnimalArrayType = typeof(Animal).MakeArrayType();
        Console.WriteLine(AnimalArrayType.GetConstructors()[0]);
    }
}


输出为:Void .ctor(Int32)。为什么?不应该是Void .ctor(System.string)吗?

最佳答案

您调用了.MakeArrayType(),所以您正在对Animal数组进行反射,而不是对Animal本身进行反射。如果删除它,您将获得所需的构造函数。

Type AnimalArrayType = typeof(Animal);
Console.WriteLine(AnimalArrayType.GetConstructors()[0]);


如果要获取数组类型的元素类型,可以这样做。

Type AnimalArrayType = typeof(Animal[]);
Console.WriteLine(AnimalArrayType.GetElementType().GetConstructors()[0]);


为了构造所需大小的数组,可以使用它。

Type AnimalArrayType = typeof(Animal[]);
var ctor = AnimalArrayType.GetConstructor(new[] { typeof(int) });
object[] parameters = { 3 };
var animals = (Animal[])ctor.Invoke(parameters);

07-26 04:02