如何判断参数是标准参数、输出参数还是引用参数
本文关键字:参数 标准 引用 输出 判断 何判断 | 更新日期: 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