如何判断一个参数是标准的,输出还是参考?
问题描述:
我找到了this great resource,它解释了如何使用.NET反射来确定标准参数,输出参数或参考参数。如何判断一个参数是标准的,输出还是参考?
现在,我想用EnvDTE来做同样的事情。 the documentation似乎没有任何明显的方法。那么,如何做到这一点?
我不想求助于字符串解析,如果我不需要,但如果没有其他方式,我会接受它作为答案(提供您展示的例子)。
在相关说明 - 您如何确定使用DTE的可选参数的默认值?
一些背景
我创造了在Visual Studio IDE扩展(单个文件生成器)。它读取项目代码文件并查找装饰有某些自定义属性的接口,然后检索有关接口的所有成员和继承成员的信息。最终目标是基于这些接口生成完全实现的方法和属性。我有它的标准参数工作,但如何使它识别参考,出和可选参数证明是困难的。
答
您可以将您的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
根据我的经验,DTE是你很少西澳方式nt来解决问题。如果您可以提供更多关于您尝试解决的具体问题的信息,它可以帮助我提供最佳答案。 – 2014-10-06 16:03:52
我更新了我的问题。谢谢。 – NightOwl888 2014-10-06 16:16:27
我编辑过你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-10-07 07:08:30