[英]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 中的 count 參數是可選的。對於上述方法,我使用反射調用這里是代碼:
result = methodInfo.Invoke(classInstance, new object[] {request, constants});
我嘗試過以下方法但遇到異常
result = methodInfo.Invoke(classInstance, new object[] {request, constants ,System.Type.Missing});
得到了Method2的異常,上面的代碼適用於Method1
參數計數不匹配。
請向我建議使用反射的方法中的可選參數
提前致謝!
可選參數:實際上不是可選的——所發生的只是編譯器通常會自動為您提供省略的值。 由於您在這里沒有使用編譯器,因此您需要自己提供它,使用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}");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.