2009-06-05 15 views
6

मैं एक सी # विधि को लागू करने की कोशिश कर रहा हूं जो प्रारूप स्ट्रिंग के साथ एक संदेश लॉग कर सकता है और printf-style तर्कों की एक चर संख्या को लॉग कर सकता है। आदर्श रूप से, यह नीचे चिपकाए गए सी फ़ंक्शन के समान काम करेगा, हालांकि निश्चित रूप से सी # के लिए बेवकूफ है।printf-style तर्कों की एक चर संख्या के साथ एक संदेश लॉग इन करें

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); 
    } 
} 

इस समारोह, मेरे लिए सुविधाजनक है के रूप में यह मेरा पीछा कर कॉल करने के लिए अनुमति देता है:

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

उत्तर

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

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

धन्यवाद, यह वही चीज़ है जो मैं ढूंढ रहा था। मेरे पास कुछ सही तत्व थे, लेकिन उन्हें सही "ऑर्डर" में नहीं मिला! –

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

आप बनाना चाहते हैं एक variadic function

सी # का उपयोग करता है params यह करने के लिए कीवर्ड

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

कृपया ध्यान दें कि पैरामीटर कीवर्ड केवल विधि हस्ताक्षर में पिछले पैरामीटर पर इस्तेमाल किया जा सकता है और यह पैरामीटर की आवश्यकता है कि एक सरणी किया जाना है।

यह वास्तव में एक सरणी पास करने के लिए सिंटैक्टिक चीनी है।

संबंधित मुद्दे