2013-09-24 52 views
1

這是我記錄的簽名正在命名的可選參數[]數組,我可以這樣做嗎?

public static void Debug(string message,Exception exception = null,object model = null,object userId = null,[CallerMemberName] string memberName = "",params object[] formatParams) 

,我試圖用它說喜歡

Logger.Debug("My message: {0} {1}", formatParams:1,2) 

我怎樣才能做到這一點?我無法在網上找到它,我希望這是可能的。我嘗試了一個匿名類型,但沒有工作。

Logger.Debug("My message: {0} {1}", formatParams: new{1,2}) 

分辨率: 我結束了使用下面的例子。我用任何其他語法都得到了不同的錯誤,所以想確保這裏保存了。

Logger.Debug("My message: {0} {1} {2}", formatParams: new object[] { 1, "string", 123.12m }); 

編輯: 我的問題我有最終被相關的動態在formatParams傳遞,我解決了這個由它鑄造它實際上是登錄前的類型。

+0

謝謝喬恩,我很難找到任何東西,所以更多的資源越多越好。 – Tony

回答

4

是的,你可以。你只要有一個這樣的數組來調用它:

Logger.Debug("My message: {0} {1}", formatParams: new object[] { 1, 2 }); 

對於一個參數,這是沒有必要的,你可以用:

Logger.Debug("My message: {0}", formatParams: 1); 

注意,在很多情況下,你可以還使用一個隱式類型數組:

Logger.Debug("My message: {0} {1}", formatParams: new[] { 1, 2 }); 

然而,這將通過對象的數組,其包含單個整數數組。參數值看起來實際上是這樣的:

new object[] { new int[] { 1, 2 } } 
+0

感謝您的信息,第一個工作,第二個抱怨傳遞一個int數組,第三個投擲類型的問題也是,第四個是有道理的。我已經開始使用第一個例子,感謝好的信息! – Tony

+0

@Tony好吧,他們都應該儘可能地調用你的方法(即如果你的方法是完全空的,它根本不會抱怨)。這一切都取決於你的方法*如何解釋傳入的參數。它只是表明,你需要對這種參數傳遞有點小心。 –

+0

我發現了我遇到的問題。我傳入的變量實際上是一個動態的,顯然這是無效的,爲了解決這個問題,我只需將動態轉換爲最終記錄之前的對象即可。幸運的是,這只是一個整數,並不是真正的動態。謝謝您的幫助! – Tony