2014-01-12 65 views
6

喜歡的String.Format方法考慮的方法有像string.Format的弗里斯特參數format參數來寫。如您所知,Intellisense知道第一個參數的約束並檢查其與參數的一致性。我怎麼寫這樣的方法。如何編寫一個帶智能感知支持

舉一個簡單的例子,考慮string.Format就像一個包裹:

public string MyStringFomratter(string formatStr, params object[] arguments) 
{ 
    // Do some checking and apply some logic 
    return string.Format(formatStr, arguments); 
} 

我怎樣才能到編譯器或IDE,它formatStr是一樣的東西string.Format的第一個參數說呢?

所以,如果我有一些像這樣的代碼:

var x = MyStringFormatter("FristName: {0}, LastName: {1}", firstName); 
// This code should generate a warning in the IDE 
+6

你不能讓Visual Studio爲你分析參數內容。但是你可以使用Visual Studio插件(如ReSharper的),它會驗證參數計數的String.Format –

+0

@SergeyBerezovskiy你們ReSharper的檢查,只是針對的String.Format,但對於我自己的方法?有沒有辦法? – mehrandvd

+0

Resharper檢查了對於每種方法,您都不認爲Reshaper的硬編碼製造商會針對一種方法名稱或另一種方法進行檢查 – MikeSW

回答

10

你不能讓Visual Studio爲你分析參數內容 - 它只是驗證代碼是否可編譯,即使你沒有爲所有佔位符指定參數,String.Format也是可編譯的。但是你可以使用Visual Studio插件(例如ReSharperCodeRush)的分析佔位符計數String.Format格式化字符串和驗證參數計數傳遞給此方法。

BTW我不使用ReSharper的,但看起來像它有任何標記方法,字符串格式化方法的支持 - Defining Custom String Formatting Methods。你只需要用StringFormatMethodAttribute屬性標註你的方法:

[StringFormatMethod("formatStr")] 
public string MyStringFomratter(string formatStr, params object[] arguments) 
{ 
    // Do some checking and apply some logic 
    return string.Format(formatStr, arguments); 
} 
+1

這是我正在尋找的確切答案。謝謝。 – mehrandvd

0

編譯器不使用的參數數目錯誤發出警告的String.Format。 但是,如果您需要智能感知支持,請在方法前加上///,它將創建一個用於記錄方法的模板。填寫文件並在使用該方法時出現在智能感知中。

+0

事實上,我正在尋找一種方法來告訴Resharper我的方法參數的行爲。 – mehrandvd

+0

我認爲像String.Format這樣的方法在Resharper中是硬編碼的。抱歉。 –