2013-01-16 17 views
18

Teraz (C# 4.0), nasza metoda rejestrowania wyglądaŁącząc CallerMemberName z params

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

gdzie rejestrator robi formatowanie ciąg tak, że rozmówca nie wprowadziły String.Format, aby stworzyć miłą wiadomość dziennika (i pozwala programowi rejestrującemu pominąć formatowanie ciągów, jeśli nie ma dołączonej przeglądarki).

Z C# 5.0 Chciałbym pozbyć się parametru methodName za pomocą nowego atrybutu CallerMemberName, ale nie widzę sposobu, w jaki można go połączyć ze słowem kluczowym "params". Czy jest jakiś sposób na zrobienie tego?

Odpowiedz

11

Uważam, że po prostu nie można połączyć params i opcjonalnych parametrów, które są wymagane dla CallerMemberName. Najlepsze, co możesz zrobić, to użyć rzeczywistej tablicy zamiast params.

+0

Bałem tak. Dzięki za potwierdzenie. – Emile

19

Można zrobić coś takiego:

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

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

Aby użyć dziennika zrobić tak:

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

To jest genialny pomysł! Dziękuję Ci! – sajmons

Powiązane problemy