如何判断参数是标准,输出还是参考?

时间:2014-10-06 16:01:24

标签: c# .net system.reflection envdte

我发现this great resource解释了如何使用.NET反射在标准,输出或参考参数之间进行确定。

现在,我想用EnvDTE做同样的事情。在the documentation中似乎没有任何明显的方式。那么如何实现这一目标呢?

如果我不需要,我不想诉诸字符串解析,但如果没有别的办法,我会接受它作为答案(如果你展示一个例子)。

在相关说明中 - 如何使用DTE确定可选参数的默认值?

某些情境

我正在为Visual Studio IDE(单个文件生成器)创建扩展。它读取项目代码文件并查找使用某些自定义属性修饰的接口,然后检索有关所有成员和接口的继承成员的信息。最终目标是基于这些接口生成完全实现的方法和属性。我让它适用于标准参数,但是如何确定参考,输出和可选参数的工作证明是困难的。

1 个答案:

答案 0 :(得分:2)

您可以将CodeParameter转换为CodeParameter2界面 注意:您必须添加对EnvDTE80.dll程序集的引用。

之后,您可以分析其ParameterKind属性,例如:

CodeFunction function = ...;
foreach (CodeParameter2 param in function.Parameters)
{
    if (param.ParameterKind == vsCMParameterKind.vsCMParameterKindNone)
    {
        // standard parameter
    }
    else if (param.ParameterKind == vsCMParameterKind.vsCMParameterKindOptional)
    {
        // optional parameter
    }
    else if (param.ParameterKind == vsCMParameterKind.vsCMParameterKindOut)
    {
        // out parameter
    }
    else if (param.ParameterKind == vsCMParameterKind.vsCMParameterKindRef)
    {
        // reference parameter
    }
}

关于:

  

在相关说明中 - 如何使用DTE确定可选参数的默认值?

如果参数是可选的,您可以使用DefaultValue属性来获取或设置其默认值。


作为旁注,当EnvDTE type没有提供所需的功能时,我建议的第一件事就是寻找具有更高版本号的类型对应物:

  

CodeParameter => CodeParameter2
  Debugger => Debugger2 => ... => Debugger5