【问题标题】:How to determine if a ParameterInfo is a return parameter如何确定 ParameterInfo 是否为返回参数
【发布时间】:2012-11-01 05:56:58
【问题描述】:

如何确定ParameterInfo 是否为返回参数?

我写了下面的函数,但我担心我可能会遗漏一些东西:

public bool IsReturnParameter(ParameterInfo parameter){
    var method = parameter.Member as MethodInfo;
    return method != null && parameter.Equals(method.ReturnParameter);
}

我基于几个假设,这些假设可能存在缺陷:(1) 参数是在 MethodInfoConstructorInfoPropertyInfo(索引器)的成员上声明的。 (2) ConstructorInfoPropertyInfo 永远不会有返回参数。

【问题讨论】:

  • 你想知道方法是否有out/ref参数?
  • 没有。我想知道是不是方法的返回参数
  • 要清楚,你想要 ParameterInfo 告诉你方法的返回是否有任何自定义属性?
  • @JeffN825,是的。这就是我想要测试的。
  • 也许我不明白这个问题。这个的用途是什么?根据我的测试,ReturnParameter 的值不会出现在GetParameters() 的结果中——我发现获得它的唯一方法是显式检查ReturnParameter 属性。如果你这样做,你已经知道它是返回参数。

标签: c# .net reflection system.reflection parameterinfo


【解决方案1】:

您可以检查 ParameterInfo.Position == -1 是否...但是您的相等检查似乎同样好...尽管在某些情况下它不能正确处理覆盖或接口或泛型类型。

【讨论】:

  • 哇,我知道我忘记了什么
【解决方案2】:

假设你指的是out int foo,你想要parameter.IsOut

如果您想要返回值,请尝试IsRetval,尽管我以前从未听说过。

【讨论】:

  • (1) 我不是要输出参数。我要求返回值。 (2) 这不是IsRetval 的用途
  • 所以IsRetval 正确的检查,除了编译器通常不会设置它。 "The [retval] attribute designates the parameter that receives the return value of the member."
猜你喜欢
  • 2011-06-11
  • 2013-08-19
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2013-04-08
  • 2020-11-17
  • 1970-01-01
  • 2014-07-23
相关资源
最近更新 更多