如何在参数是可选的时获取默认构造函数

dls*_*sou 9 c# reflection constructor

我正在使用Type.GetConstructor(Type.EmptyTypes)获取类的默认构造函数.如果类具有没有参数(class A)的默认构造函数,则它可以工作.但是如果一个类有一个带有所有参数optional(class B)的构造函数,它就不起作用.程序不知道可选参数是什么,因为它只需要默认的构造函数.我可以使用哪些语句使其适用于这两种情况?谢谢,感谢任何帮助!

public class A
{
    public A() {}
} 

public class B
{
    public B(int i = 0, string str = "") {}
}
Run Code Online (Sandbox Code Playgroud)

Tej*_*ejs 6

说我有以下课程:

public class SomeClass
{
    public SomeClass()
    {

    }

    public SomeClass(int x)
    {
    }

    public SomeClass(int x = 0, int y = 0)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,您要求的查询将找到与上面的构造函数1和3匹配的构造函数?如果是这样,请使用:

var constuctors = typeof(SomeClass).GetConstructors()
            .Where(x => x.GetParameters().Count() == 0 
                    ||  x.GetParameters().Count(param => param.GetCustomAttributes(typeof(OptionalAttribute), false).Count() > 0) == x.GetParameters().Count());    
Run Code Online (Sandbox Code Playgroud)

令人难以置信的令人讨厌的查询,但它完成的工作仅返回上面的1和3.