需要从构造函数信息中获取可选参数

本文关键字:获取 参数 信息 构造函数 | 更新日期: 2023-09-27 18:37:08

可能的重复项:
通过反射
调用具有可选参数的方法 C# 中构造函数参数的名称

现在我正在使用反射构建对象。 我正在使用它来填写 API 文档。 在许多情况下,我想要一个非默认构造函数,但有时它们具有可选参数。 这些可选参数需要用默认对象以外的新对象覆盖。 问题是我不知道如何获得它们。 使用构造函数Info.GetParameters()很容易获得常规参数,但是似乎可选的参数不会返回。 我在这里错过了什么吗?

示例代码:

            ConstructorInfo[] constructorInfoList = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public);
            foreach (ConstructorInfo constructorInfo in constructorInfoList)
            {
                var parameters = constructorInfo.GetParameters();
                if (parameters.Count() > 0)
                {

答:原来他们确实回来了...这是用户错误。

样本:

void Main()
{
    var ctors = typeof(Foo).GetConstructors();
    foreach(var ctor in ctors)
    {
        foreach(var param in ctor.GetParameters())
        {
            Console.WriteLine("Name: {0} Optional: {1}", param.Name, param.IsOptional);
        }
    }   
}
public class Foo
{
    public Foo(string option1, string option2 = "")
    {
    }
}

输出:

名称:选项 1 可选:假名称:选项 2 可选:真

需要从构造函数信息中获取可选参数

可能的重复项。 您似乎可以调用该参数,但必须手动设置值。

我在这里发现了类似的问题:

通过反射调用具有可选参数的方法

看到这里,它有效:

var parameterName =
    typeof(Foo)
    .GetConstructor(new[] { typeof(string) })
    .GetParameters()
    .Single().Name;
public class Foo
{
    public Foo(string paramName)
    {   
    }
}