gpt4 book ai didi

c# - GetConstructors 找不到声明的构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:18 25 4
gpt4 key购买 nike

我正在试验 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);

关于c# - GetConstructors 找不到声明的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com