如何使用反射c#调用带有可选参数的方法
How to call Method with optional parameters using reflections c#
我正在调用一个使用反射的方法。但是,由于某些要求,方法参数之一已更改并将新参数保留为可选参数。
这是代码
Void Method1(string request, string constants, string count = null)
Void Method2(string request, string constants)
在 Method1 中,计数参数是 optional。对于上述方法,我使用反射调用
这是代码:
result = methodInfo.Invoke(classInstance, new object[] {request, constants});
我尝试过以下方法但出现异常
result = methodInfo.Invoke(classInstance, new object[] {request, constants ,System.Type.Missing});
Method2 出现以下异常以上代码适用于 Method1
Parameter count mismatch.
请建议我使用反射的方法中的可选参数
提前致谢!
可选参数:实际上不是可选的 - 所发生的只是编译器通常会自动为您提供省略的值。由于您在这里没有 使用 编译器,因此您需要使用 new object[] {request, constants, null}
自己提供它。请注意,如果您想正确遵守默认值(而不是在这种情况下知道它是 null
),您需要查看 ParameterInfo
,特别是 .HasDefaultValue
和 .DefaultValue
.
示例(不使用 ParameterInfo
,注意):
using System;
using System.Reflection;
class P
{
static void Main()
{
string request = "r", constants = "c", count = "#";
var classInstance = new P();
typeof(P).GetMethod(nameof(Method1),
BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(classInstance, new object[] { request, constants, null });
typeof(P).GetMethod(nameof(Method1),
BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(classInstance, new object[] { request, constants, count });
typeof(P).GetMethod(nameof(Method2),
BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(classInstance, new object[] { request, constants });
}
void Method1(string request, string constants, string count = null)
=> Console.WriteLine($"#1: {request}, {constants}, {count}");
void Method2(string request, string constants)
=> Console.WriteLine($"#2: {request}, {constants}");
}
我正在调用一个使用反射的方法。但是,由于某些要求,方法参数之一已更改并将新参数保留为可选参数。 这是代码
Void Method1(string request, string constants, string count = null)
Void Method2(string request, string constants)
在 Method1 中,计数参数是 optional。对于上述方法,我使用反射调用 这是代码:
result = methodInfo.Invoke(classInstance, new object[] {request, constants});
我尝试过以下方法但出现异常
result = methodInfo.Invoke(classInstance, new object[] {request, constants ,System.Type.Missing});
Method2 出现以下异常以上代码适用于 Method1
Parameter count mismatch.
请建议我使用反射的方法中的可选参数
提前致谢!
可选参数:实际上不是可选的 - 所发生的只是编译器通常会自动为您提供省略的值。由于您在这里没有 使用 编译器,因此您需要使用 new object[] {request, constants, null}
自己提供它。请注意,如果您想正确遵守默认值(而不是在这种情况下知道它是 null
),您需要查看 ParameterInfo
,特别是 .HasDefaultValue
和 .DefaultValue
.
示例(不使用 ParameterInfo
,注意):
using System;
using System.Reflection;
class P
{
static void Main()
{
string request = "r", constants = "c", count = "#";
var classInstance = new P();
typeof(P).GetMethod(nameof(Method1),
BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(classInstance, new object[] { request, constants, null });
typeof(P).GetMethod(nameof(Method1),
BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(classInstance, new object[] { request, constants, count });
typeof(P).GetMethod(nameof(Method2),
BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(classInstance, new object[] { request, constants });
}
void Method1(string request, string constants, string count = null)
=> Console.WriteLine($"#1: {request}, {constants}, {count}");
void Method2(string request, string constants)
=> Console.WriteLine($"#2: {request}, {constants}");
}