我正在试验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)
吗?
答案 0 :(得分:3)
您致电.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);