我不确定我是否完全错过了这里的东西,但我找不到任何方法来确定参数是否通过引用传递,或者不使用反射.
ArgumentInfo有一个属性"IsOut",但没有"IsRef".我如何在给定的MethodInfo中获取所有参考参数?
Rex*_*x M 39
ParameterInfo[] parameters = myMethodInfo.GetParameters();
foreach(ParameterInfo parameter in parameters)
{
bool isRef = parameterInfo.ParameterType.IsByRef;
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*los 12
ParameterType.IsByRef
将返回true
两者ref
和 out
参数.
如果你有一个ParameterInfo
对象(例如来自MethodInfo.GetParameters()
),那么:
out
ifparameterInfo.ParameterType.IsByRef && parameterInfo.IsOut
ref
ifparameterInfo.ParameterType.IsByRef && parameterInfo.IsOut == false
如果你不IsByRef
检查out
参数,那么你将错误地获取用[Out]
属性装饰的成员,System.Runtime.InteropServices
但实际上不是C#out
参数.
您需要进一步检查参数的类型.例如,如果你有
void Foo(ref int bar)
Run Code Online (Sandbox Code Playgroud)
然后参数的名称将不是int
或Int32
(正如您可能预期的那样)而是Int32&
.对于每种类型,都有一个对应的by-ref-type,其中原始类型后缀为'&'.您可以通过班级的IsByRef
财产来查看Type
.
归档时间: |
|
查看次数: |
7927 次 |
最近记录: |