2012-08-23 20 views
23

我喜歡String.Format如何使用參數將變量注入到它正在格式化的字符串中。這稱爲複合格式,由MSDN here討論。如何使我自己的方法類似於在C#中使用複合格式的String.Format

我想這個功能我的日誌門面:

string foo = "fancy"; 
string bar = "message"; 
log.Debug("My {0} log {1}.", foo, bar) 

我ILoggerFacade有以下方法簽名:

void Debug<T>(T message, params Object[] args); 

而且,我知道我可以很簡單地實現這一點:

ILog m_Log = \\some logging implementation 
public void Debug<T>(T message, params Object[] args) 
{ 
    m_Log.Debug(String.Format(message, args)); 
} 

但是,在Visual Studio中,我沒有看到突出顯示{0},{1},... ar guments:

Argument highlighting for Composite Formatting methods

我想這是ReSharper的是誰resposible他們,現在看來似乎只是忽略了格式化參數,並沒有給出「智能感知」的幫助。這是不好的,因爲其他將使用外觀的開發人員會期待這一點。

如何獲得類似於如何將這些工作自定義格式的方法論證高亮和「智能感知」:

Console.WriteLine(...) 
String.Format(...) 
etc... 

任何幫助,將不勝感激。

回答

29

查看ReSharpers External Annotations。具體來說,你想爲此使用StringFormatMethodAttribute

要使用外部註釋,實際上有3種方法。它列出了兩個,你必須在行之間閱讀才能看到。

  1. 引用「JetBrains.Annotations.dll」。我會建議反對這個。我不喜歡複製DLL的想法,或者不得不引用ReSharper安裝目錄。如果您升級或重新安裝,這可能會導致問題。

  2. 將屬性聲明覆制並粘貼到您的解決方案中。我會推薦這個,因爲它給你更多的控制權。此外,你可以擺脫ReSharper(爲什麼有人會這麼做?我想,奇怪的事情已經發生了),並且仍然將這個特性提供給消耗你的庫的任何人。有關如何在第一個鏈接中執行此操作的分步說明。

  3. 創建一個XML文件,類似於.NET Assemblies的用法。我爲Silverlight單元測試框架做了這個。 ReSharper默認不會識別這些測試。

    爲此

    1. 創建一個文件名<assembly>.xml並把它放在 「ReSharper的\ VXX \ BIN \ ExternalAnnotations」。
    2. 添加根元素"<assembly name="<assembly>">
    3. 現在爲每個要爲其添加屬性的成員添加​​元素。

    我不建議對您自己的代碼進行此操作。但是,如果您想要具有此功能但無法編輯的程序集,則可以這樣做。這僅適用於您的機器,並且每個使用該程序集的開發人員都需要複製xml文件。

+2

關於第三種方式添加註解 - 你可以把註釋XML文件彙編附近,由 .ExternalAnnotations.xml命名,並提交到你的CVS。所有其他開發人員將在更新期間自動獲取它。 – derigel

+0

@derigel好的電話。我忘了那個。我打賭你可以做一些事情,將其包含在NuGet包中。不過,如果有的話,我仍然會推薦選項2。 – cadrell0

+2

按照建議執行步驟2: http://www.jetbrains.com/resharper/webhelp/Code_Analysis__Annotations_in_Source_Code.html – Oliver

相關問題