2014-10-06 74 views
0

我找到了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

回答

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

相關問題