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

问题描述:

我找到了this great resource,它解释了如何使用.NET反射来确定标准参数,输出参数或参考参数。如何判断一个参数是标准的,输出还是参考?

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

我不想求助于字符串解析,如果我不需要,但如果没有其他方式,我会接受它作为答案(提供您展示的例子)。

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

一些背景

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

+0

根据我的经验,DTE是你很少西澳方式nt来解决问题。如果您可以提供更多关于您尝试解决的具体问题的信息,它可以帮助我提供最佳答案。 – 2014-10-06 16:03:52

+0

我更新了我的问题。谢谢。 – NightOwl888 2014-10-06 16:16:27

+0

我编辑过你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-10-07 07:08:30

您可以将您的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