2012-08-23 17 views
23

में समग्र स्वरूपण का उपयोग करके फ़ॉर्मैट मुझे पसंद है कि स्ट्रिंग.फॉर्मैट स्ट्रिंग में स्ट्रिंग में चर को इंजेक्ट करने के लिए तर्कों का उपयोग कैसे करता है। इसे कंपोजिट फॉर्मेटिंग कहा जाता है और एमएसडीएन here द्वारा चर्चा की जाती है।मैं अपनी खुद की विधि स्ट्रिंग के समान कैसे बना सकता हूं। C#

मैं अपने प्रवेश मुखौटा के साथ इस कार्यक्षमता हैं:

string foo = "fancy"; 
string bar = "message"; 
log.Debug("My {0} log {1}.", foo, bar) 

मेरे ILoggerFacade निम्न विधि हस्ताक्षर हैं:

void Debug<T>(T message, params Object[] args); 

और, मैं जानता हूँ कि मैं काफी बस यह लागू कर सकते हैं:

ILog m_Log = \\some logging implementation 
public void Debug<T>(T message, params Object[] args) 
{ 
    m_Log.Debug(String.Format(message, args)); 
} 

हालांकि, विजुअल स्टूडियो में मुझे {0}, {1}, ... ar की फैंसी हाइलाइटिंग नहीं मिलती है guments:

Argument highlighting for Composite Formatting methods

मैं इसे ReSharper जो उनके लिए जिम्मेदार है लगता है, और यह है कि यह सिर्फ स्वरूपण तर्क अनदेखी और नहीं "IntelliSense" मदद दे रहा है लगता है। यह अच्छा नहीं है क्योंकि अन्य डेवलपर्स जो मुखौटा का उपयोग करेंगे, इसकी उम्मीद होगी।

Console.WriteLine(...) 
String.Format(...) 
etc... 

किसी भी मदद की सराहना की जाएगी:

मैं तर्क हाइलाइटिंग और "IntelliSense" कैसे इन काम के लिए इसी तरह कस्टम स्वरूपित तरीकों के लिए कैसे मिलता है।

उत्तर

29

रीशेर्पर External Annotations देखें। विशेष रूप से, आप इसके लिए StringFormatMethodAttribute का उपयोग करना चाहते हैं।

बाहरी एनोटेशन का उपयोग करने के लिए वास्तव में 3 विधियां हैं। दो जो यह बताता है, और एक जिसे आपको देखने के लिए लाइनों के बीच पढ़ना है।

  1. संदर्भ "JetBrains.Anotations.dll"। मैं इस के खिलाफ सिफारिश करेंगे। मुझे डीएलएल की प्रतिलिपि बनाने या रीशेर्पर इंस्टॉल निर्देशिका का संदर्भ देने का विचार पसंद नहीं है। यदि आप अपग्रेड या पुनः इंस्टॉल करते हैं तो इससे समस्याएं हो सकती हैं।

  2. आपके समाधान में विशेषता घोषणाओं को कॉपी और पेस्ट करना। मैं इसकी सिफारिश करता हूं क्योंकि यह आपको अधिक नियंत्रण देता है। इसके अतिरिक्त, आप रीशेर्पर से छुटकारा पा सकते हैं (कोई ऐसा क्यों करेगा? अजनबी चीजें हुई हैं, मुझे लगता है।), और फिर भी यह सुविधा किसी भी व्यक्ति को प्रदान करती है जो आपकी लाइब्रेरी का उपभोग करती है। पहले लिंक में इसे कैसे करें इस पर चरण-दर-चरण निर्देश दिए गए हैं।

  3. एक XML फ़ाइल बनाएं, जो .NET असेंबली के लिए उपयोग करता है। मैंने सिल्वरलाइट यूनिट टेस्ट फ्रेमवर्क के लिए ऐसा किया था। ReSharper डिफ़ॉल्ट रूप से इन परीक्षणों को पहचान नहीं करता है।

    ऐसा करने के लिए इस

    1. एक फ़ाइल नाम <assembly>.xml बनाएँ और "ReSharper \ vXX \ बिन \ ExternalAnnotations" में रख दें।
    2. रूट तत्व जोड़ें "<assembly name="<assembly>">
    3. अब प्रत्येक सदस्य के लिए <member> तत्व जोड़ें जो आप एक विशेषता देना चाहते हैं।

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

+2

टिप्पणियां जोड़ने के लिए तीसरा रास्ता के बारे में - आप विधानसभा के पास एनोटेशन xml फ़ाइल डाल सकते हैं, .ExternalAnnotations.xml द्वारा यह नाम रख कर अपनी सीवीएस के लिए यह करते हैं। अन्य सभी डेवलपर इसे अपडेट के दौरान स्वचालित रूप से प्राप्त करेंगे। – derigel

+0

@derigel गुड कॉल। मैं उसके बारे में भूल गया। मैं शर्त लगा रहा हूं कि आप इसे Nu Nuet पैकेज में शामिल करने के लिए कुछ भी कर सकते हैं। हालांकि, अगर उपलब्ध हो तो भी मैं विकल्प 2 की सिफारिश करूंगा। – cadrell0

+2

सुझाव के अनुसार चरण 2 करने के लिए: http://www.jetbrains.com/resharper/webhelp/Code_Analysis__Annotations_in_Source_Code.html – Oliver

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