2009-06-05 14 views
6

Próbuję zaimplementować metodę C#, która może rejestrować komunikat za pomocą ciągu formatu i zmiennej liczby argumentów stylu printf. Idealnie działałoby to identycznie jak funkcja C, którą wkleiłem poniżej, chociaż oczywiście idiomatyczne do C#.Logować komunikat ze zmienną liczbą argumentów w stylu printf

static 
void 
LogMessage(const char * iFormat, ...) 
{ 
    va_list argp; 
    FILE * fp; 

    fp = fopen("log.txt", "a"); 
    if (fp != NULL) { 
    va_start(argp, iFormat); 
    vfprintf(fp, iFormat, argp); 
    va_end(argp); 
    fprintf(fp, "\n"); 
    fclose(fp); 
    } 
} 

Funkcja ta jest wygodna dla mnie, ponieważ pozwala mi dokonać następujących połączeń:

LogMessage("Testing"); 
LogMessage("Testing %s", "1 2 3"); 
LogMessage("Testing %d %d %d", 1, 2, 3); 

Odpowiedz

15
static void LogMessage(string format, params object[] args) { 
    File.AppendAllText("log.txt", string.Format(format, args)); 
} 

LogMessage("Testing {0} {1}", 1, "hi"); 
+0

Dzięki, właśnie tego rodzaju rzeczy szukałem. Miałem kilka właściwych elementów, ale po prostu nie mogłem uzyskać ich we właściwym "porządku"! –

0
static void LogMessage(params string [] logList) 
{ 
    for (int i = 0 ; i < logList.Length ; i++) 
     doLogging(logList[i]); 
} 
9

Chcesz stworzyć variadic function

C# używa params słowo kluczowe do wykonania tego:

static void LogMessage(string formatString, params string[] formatArguments) 
{ 
    string.Format(formatString, formatArguments); 
} 

Należy pamiętać, że słowo kluczowe params może być używany tylko w ostatnim parametr w podpis metody i że wymaga to parametr, który ma być tablica.

To tylko cukier syntaktyczny do faktycznego podania tablicy.

Powiązane problemy