2013-01-16 13 views
18

In questo momento (C# 4.0) il nostro metodo di registrazione assomigliaCombinando CallerMemberName con params

public void Log(string methodName, string messageFormat, params object[] messageParameters) 

in cui il registratore fa la formattazione di stringhe, in modo che il chiamante non hanno messo String.Format di creare un bel messaggio di log (e consente al logger di saltare la formattazione della stringa se non è associato logviewer).

Con C# 5.0 vorrei eliminare il parametro methodName utilizzando il nuovo attributo CallerMemberName ma non vedo come questo possa essere combinato con la parola chiave 'params'. C'è un modo per fare questo?

risposta

11

Credo che semplicemente non sia possibile combinare params e parametri opzionali, che sono richiesti per CallerMemberName. Il meglio che puoi fare è usare la matrice effettiva invece di params.

+0

avevo paura così. Grazie per la conferma. – Emile

19

Si potrebbe fare qualcosa di simile:

protected static object[] Args(params object[] args) 
{ 
    return args; 
} 

protected void Log(string message, object[] args = null, [CallerMemberName] string method = "") 
{ 
    // Log 
} 

Per utilizzare il registro fare così:

Log("My formatted message a1 = {0}, a2 = {2}", Args(10, "Nice")); 
+0

È un'idea geniale! Grazie! – sajmons