Alx*_*ndr 55 .net c# reflection invoke default-value
我使用带有可选参数的C#4.0遇到了另一个问题.
我如何调用一个函数(或者更确切地说是构造函数,我有ConstructorInfo对象),我知道它不需要任何参数?
这是我现在使用的代码:
type.GetParameterlessConstructor()
.Invoke(BindingFlags.OptionalParamBinding |
BindingFlags.InvokeMethod |
BindingFlags.CreateInstance,
null,
new object[0],
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
(我刚试过不同的BindingFlags).
GetParameterlessConstructor是我写的自定义扩展方法Type.
Mat*_*low 124
根据MSDN,要使用默认参数,您应该通过Type.Missing.
如果您的构造函数有三个可选参数,那么您将传递一个三元素对象数组,而不是传递一个空对象数组,其中每个元素的值都是Type.Missing,例如
type.GetParameterlessConstructor()
.Invoke(BindingFlags.OptionalParamBinding |
BindingFlags.InvokeMethod |
BindingFlags.CreateInstance,
null,
new object[] { Type.Missing, Type.Missing, Type.Missing },
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 23
可选参数由普通属性表示,并由编译器处理.
它们对IL没有影响(元数据标志除外),反射不直接支持(除了IsOptional和DefaultValue属性).
如果要使用带反射的可选参数,则需要手动传递其默认值.
| 归档时间: |
|
| 查看次数: |
19325 次 |
| 最近记录: |