2010-02-07 6 views
13

मैं ToString प्रारूप का प्रारूप निर्दिष्ट करना चाहता हूं, लेकिन मुझे यह संभालने का सबसे अच्छा तरीका नहीं है।मैं अपना खुद का कस्टम ToString() प्रारूप कैसे बना सकता हूं?

उदाहरण के लिए अगर मैं निम्नलिखित विनिर्देशक है

  • ई = उपकरण
  • प्रवर्तन निदेशालय = उपकरण विवरण
  • ईआई = उपकरण आईडी
तो

कि अगर मैं ToString इस्तेमाल किया जैसे :

eqp.ToString("EE-EI (ED)") 

उत्पादन हो सकता है:

"CAT994-61 (Front end loader)" 

सबसे अच्छा तरीका है सबस्ट्रिंग के लिए खोज और एक टोकन प्रतिस्थापन करने के लिए होगा? क्या किसी के पास ऐसा करने का एक उदाहरण है?

मैं वर्तमान में अनुक्रमिक string.Replace कर रहा हूं, जो अच्छी तरह से काम करता है।

public class Equipment 
{ 
    // (other class code) 

    public string ToString(string format) 
    { 
     string output = format; 
     output = output.Replace("EE", _EquipID); 
     output = output.Replace("ED", _EquipDescription); 
     output = output.Replace("DI", _DepartID); 
     return output; 
    } 

    public override string ToString() 
    { 
     return _EquipID; 
    } 
} 

उत्तर

13

स्ट्रिंग प्रारूप के संयोजन, और अधिक भार ToString आप ऐसा कर सकते हैं Replace फ़ंक्शन nicer बनाने के लिए।

oProd.ToString("EE,ED,EI"); 
oProd.ToString("EE-ED (EI)"); // change order 
oProd.ToString("ED-EE,EE,EE (EI)"); // multiple times 
oProd.ToString("ED:EI"); // have some missing 
etc 

String.Format आप की तरह प्रारूप चर स्थिति किसी भी तरह से, उन्हें कई बार है, या कुछ छोड़ लचीलापन प्रदान करता है:


यह इस प्रकार के रूप में इस्तेमाल किया जा सकता है।

+0

स्ट्रिंग.फॉर्मैट() विधि, क्या यह लचीलापन कम नहीं करता है, मेरे उपरोक्त संपादन को देखें। मैंने आपके उत्तर का उपयोग किया था, लेकिन मुझे string.format() – fishhead

0

String.Format का उपयोग करें।

String.Format("{0}-{1} ({2})", "CAT994", 61, "Front end loader"); 

अपेक्षित आउटपुट उत्पन्न करता है।

+0

इसलिए यदि मैंने टोकन को टोस्टिंग ("ईआई - ईई") जैसे मिश्रित किया है तो यह अभी भी काम करेगा? – fishhead

+0

'स्ट्रिंग.फॉर्मैट (" {1} - {0} ({2}) "," फू "," बार "," बाज "); '' बार-फू (बाज)" में परिणाम। –

0

तुम बस की तरह

public override string ToString() 
{ 
    /* some code handling here */ 
    return ""; //your own formated string 
} 
0

प्रारूप एक अच्छा समाधान की तरह लगता है अपने वस्तु में ToString समारोह ओवरलोड की जरूरत है।
शायद आपके इनपुट चर को समूहों में कटौती करने के लिए एक (कुछ) अच्छी नियमित अभिव्यक्तियां।

मैं अगर आप कर सकते हैं के रूप में कई मौजूदा स्वरूपों का उपयोग करने की कोशिश करेंगे:

public override string ToString(string myFormat) 
{ 
    myFormat = myFormat.Replace("EE", "{0}"); 
    myFormat = myFormat.Replace("EI", "{1}"); 
    myFormat = myFormat.Replace("ED", "{2}"); 
    return String.Format(myFormat, this.equipment, this.description, this.id); 
} 

तुम भी रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:
http://blog.stevex.net/string-formatting-in-csharp/

6

पहले ओवरराइड toString()

तो अगर आप इसे गतिशील होना चाहता हूँ आप एक समय में प्रारूप स्ट्रिंग एक टोकन पार्स करने और अपने उत्पादन स्ट्रिंग के लिए उपयुक्त स्ट्रिंग जोड़ना होगा। एकल अक्षर प्रारूप विनिर्देशों का उपयोग करना इसे थोड़ा आसान बना देगा क्योंकि आप इसे एक समय में एक चरित्र को पार्स कर सकते हैं। यदि यह एक विशेष चरित्र है तो आप उपयुक्त डेटा आउटपुट करते हैं और चरित्र को आउटपुट करते हैं।

तो यह

public override string ToString(string format) 
{ 
    StringBuilder s = new StringBuilder(); 

    foreach (char c in format) 
    { 
    switch (c) 
    { 
     case 'E': 
     s.Append(EquipID); 
     break; 
     case 'D': 
     s.Append(EquipDesc); 
     break; 
     case 'I': 
     s.Append(DepartID); 
     break; 
     default: 
     s.Append(c); 
     break; 
    } 
    } 

    return s.ToString(); 
} 

की तरह कुछ इस एक पास जो कई स्ट्रिंग कॉल की जगह से अधिक कुशल है में यह कर की अपेक्षाकृत मामूली लाभ दिया है।

+0

+1 पर बिंदु के बारे में निश्चित नहीं था, मुझे यह पसंद है, तो यह मेरी जगह के बाद बेहतर है। – Amirshk

2
String.Format("{0:foo}", object); 

गुजर "foo"object.ToString(string format); को तो यह समझ में आता है तर्क है कि अपने ToString(string format) विधि मन में है कि साथ ले जाता है डिजाइन करने के लिए खत्म हो जाएगा। अपने उदाहरण में

String.Format("{0:EI - EE}", object); 

में परिणाम होगा "ईआई - ईई" वस्तु पर ToString विधि करने के लिए पारित किया जा रहा है, तो के रूप में आप का वर्णन है कि यह काम कर सकता है, लेकिन इसे और अधिक समझ बनाने सकता है एक पर एक प्रतिनिधित्व करने के लिए प्रारूप को प्रतिबंधित करने के समय, इस

String.Format("{0:EI} - {0:EE}", object); 

की तरह जिस तरह से उत्पादन के रूप में "CAT994-61" प्राप्त करने के लिए हो सकता है, और अपने ToString() विधि हो सकता है सरल

public override string ToString(string myFormat) 
{ 
    string str = null; 
    switch (myformat.ToLower()) 
    { 
     case "ee": str = this.equipment; break; 
     case "ei": str = this.description; break; 
     case "ed": str = this.id; break; 
     default: str = this.ToString(); break; 
    } 
    return str; 
} 

आप एक करने के लिए अपना प्रारूप विनिर्देशक को कम हैं टियर, जो अन्य ऑब्जेक्ट्स ToString प्रारूपों को संभालने के तरीके के साथ अधिक संगत होगा।

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

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