如何判断参数是标准参数、输出参数还是引用参数

本文关键字:参数 标准 引用 输出 判断 何判断 | 更新日期: 2023-09-27 18:25:39

我发现了这个很好的资源,它解释了如何使用.NET反射在标准、输出或引用参数之间进行确定。

现在,我想使用EnvDTE做同样的事情。文档中似乎没有任何明显的方法。那么,如何做到这一点呢?

如果不必要的话,我不想求助于字符串解析,但如果没有其他方法,我会接受它作为答案(如果你展示一个例子)。

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

某些上下文

我正在为VisualStudioIDE(单个文件生成器)创建一个扩展名。它读取项目代码文件,查找用一些自定义属性修饰的接口,然后检索接口的所有成员和继承成员的信息。最终目标是基于这些接口生成完全实现的方法和属性。我让它为标准参数工作,但事实证明,如何使它识别ref、out和可选参数是很困难的。

如何判断参数是标准参数、输出参数还是引用参数

您可以将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类型不能提供所需的功能时,我建议的第一件事是寻找版本号更高的类型对应物:

CodeParameter=>CodeParameter2
Debugger=>Debugger2=>…=>Debugger5