我发现this great resource解释了如何使用.NET反射在标准,输出或参考参数之间进行确定。
现在,我想用EnvDTE做同样的事情。在the documentation中似乎没有任何明显的方式。那么如何实现这一目标呢?
如果我不需要,我不想诉诸字符串解析,但如果没有别的办法,我会接受它作为答案(如果你展示一个例子)。
在相关说明中 - 如何使用DTE确定可选参数的默认值?
某些情境
我正在为Visual Studio IDE(单个文件生成器)创建扩展。它读取项目代码文件并查找使用某些自定义属性修饰的接口,然后检索有关所有成员和接口的继承成员的信息。最终目标是基于这些接口生成完全实现的方法和属性。我让它适用于标准参数,但是如何确定参考,输出和可选参数的工作证明是困难的。
答案 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