2011-06-28 14 views
5

के लिए डीबगर विज़ुअलाइज़र मैंने किसी भी संग्रह (ICollection, ICollection<T>) ऑब्जेक्ट को देखने के लिए ग्रिड के साथ फ़ॉर्म बनाया है।किसी भी आईसीलेक्शन और आईसीओलेक्शन <T> प्रकार

इसके बाद मैंने डीबगर विजुअलाइज़र क्लास (Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer से विरासत) बनाया।

विज़ुअलाइज़र को व्यावसायिक रूप से स्थापित किया गया है (मैंने इसे System.Collections.ArrayList कक्षा पर आजमाया)।

लेकिन मुझे विज़ुअलाइज़र को ICollection/ICollection<T> प्रकार के सामान्यीकृत करने में समस्या है।

मैं विशेषता निर्दिष्ट:

[assembly: DebuggerVisualizer(typeof(DebugerSide), typeof(VisualizerObjectSource), Target = typeof(System.Collections.Generic.ICollection<>), Description = "Collection visualizer")] 
[assembly: DebuggerVisualizer(typeof(DebugerSide), typeof(VisualizerObjectSource), Target = typeof(System.Collections.ICollection), Description = "Collection visualizer")] 

लेकिन विजुआलाइज़र डिबग में वी.एस. द्वारा की पेशकश की नहीं है।

यदि मैं सटीक वर्ग का नाम निर्दिष्ट करता हूं, तो विज़ुअलाइज़र वीएस में उपलब्ध है। क्या कोई रास्ता है, मेरा इरादा कैसे करें या कोई रास्ता नहीं है, इसे कैसे प्राप्त किया जाए?

धन्यवाद!

उत्तर

9

मैं तुम्हें outlined in this question.

वैकल्पिक हल System.WeakReference के लिए एक विजुअलाइज़र बनाने के लिए, और फिर घड़ी विंडो में टाइप करने के लिए है "नए WeakReference रूप Visualizers वास्तुकला का एक ही सीमा में ठोकर खाई किया है लगता है (myCollectionVariable) ", और फिर आप कमजोर पड़ने पर अपना डीबग विजुअलाइज़र खोलने में सक्षम होंगे। अपने डीबग विज़ुअलाइज़र के अंदर आप यह पता लगाने के लिए प्रतिबिंब का उपयोग कर सकते हैं कि वास्तव में आपके चर का प्रकार क्या है, और जो कुछ भी आप चाहते हैं उसे करें।

this भी देखें।

+0

धन्यवाद! कामकाज थोड़ा पागल दिखता है। लेकिन यह संभवतः एकमात्र तरीका होगा, मेरे उद्देश्य को कैसे प्राप्त किया जाए। – TcKs

+0

समस्या यह है कि आप एक सामान्य वर्ग के लिए विज़ुअलाइज़र नहीं बना सकते हैं, या आप 2 "अलग" प्रकारों के लिए एक ही विज़ुअलाइज़र को पंजीकृत नहीं कर सकते हैं? –

+3

डीबगर विज़ुअलाइज़र इंटरफ़ेस प्रकारों पर काम नहीं करेंगे, केवल कक्षाओं पर (System.Array और System.Object को छोड़कर)। आपको एक विशिष्ट वर्ग निर्दिष्ट करना होगा। आप एक सामान्य वर्ग के लिए एक विज़ुअलाइज़र बना सकते हैं, लेकिन समर्थन सामान्य जेनेरिक प्रकारों तक सीमित है - जैसा कि यहां लिखा गया है: http://msdn.microsoft.com/en-us/library/e2zc529c.aspx –

0

यह ठीक काम करेगा।

[assembly: DebuggerVisualizer(typeof(DebugerSide), typeof(VisualizerObjectSource), typeof(Collection), Description = "Collection visualizer")] 
संबंधित मुद्दे