Необязательные значения параметров в C # компилируются путем введения этих значений в место вызова. То есть хотя ваш код
Foo.Bar()
Компилятор фактически генерирует вызов как
Foo.Bar("")
При поиске метода вам нужно рассматривать необязательные параметры как обычные параметры.
var method = typeof(Foo).GetMethod("Bar", BindingFlags.Static | BindingFlags.NonPublic);
Если вы точно знаете, с какими значениями вы хотите вызвать метод, вы можете сделать:
method.Invoke(obj: null, parameters: new object[] { "Test" });
Если у вас есть только некоторые параметры и вы хотите использовать значения по умолчанию, вы должны проверить объекты ParameterInfo
метода, чтобы определить, являются ли параметры необязательными и каковы эти значения. Например, чтобы распечатать значения этих параметров по умолчанию, вы можете использовать следующий код:
foreach (ParameterInfo pi in method.GetParameters())
{
if (pi.IsOptional)
{
Console.WriteLine(pi.Name + ": " + pi.DefaultValue);
}
}