2012-12-06 104 views
5

मैं अपने स्वचालन कोड में जेनेरिक पेश करने की कोशिश कर रहा हूं और इसलिए मैं सामान्य प्रकार टी में WpfControl डालने की कोशिश कर रहा हूं जहां टी को WpfControl प्रकार के रूप में बाध्य किया जाता है।कोडिंग यूआई टेस्ट कास्टिंग नहीं कर रहा है

return control as T; 

टी हमेशा WpfControl का एक बच्चा हो जाएगा अभी तक जब मैं नियंत्रण सामान्य प्रकार यह शून्य रिटर्न के प्रकार WpfControl की है जो कास्टिंग कर रहा हूँ।

var childControl = control as WpfTabList; 

यह अभी भी रिटर्न null: मैं भी तरह उदाहरण कुछ के लिए सटीक बच्चे प्रकार के नियंत्रण कास्ट करने के लिए कोशिश की है। किसी को भी इसी तरह के मुद्दों का अनुभव?

इस WpfControl Class

+1

यदि आप वर्णन करते हैं तो सबकुछ ठीक है, तो इसे काम करना चाहिए। मुझे संदेह है कि आप कुछ खो रहे हैं। क्या मैं आपको सुझाव दे सकता हूं: ए) डीबगर में कदम उठाएं और देखें कि किस प्रकार का "रन" रनटाइम पर है और बी) अधिक पूर्ण कोड पोस्ट करें। –

+1

यह भी जांचें कि नियंत्रण शून्य नहीं है! वह मुझे पहले पकड़ा गया है। –

+0

जहां लाइन जो कन्स्ट्रक्टर को आमंत्रित करती है - क्या आप इसे जोड़ सकते हैं। (नियंत्रण = नया ....) जब आप उस रेखा को ढूंढते हैं तो आप इसे अपने आप हल कर सकते हैं;) (लेकिन यदि नहीं - मैं अभी भी यहां हूं) –

उत्तर

0

कुछ recomendations देखें:

सबसे पहले, आप सामान्य विधि geteric प्रकार विनिर्देश का इस्तेमाल करें। जैसे

public T GetControl<T>(...) where T : WpfControl 

आपकी धारणा में एक misconsistnace है और implemtation आप एक एक WpfTabList जो मामलों में गलत है WpfControl का मिलान करने के एक बच्चे के नियंत्रण एक TabList नहीं है कोशिश कर रहे हैं।

0

यह निश्चित रूप से काम करता है। मेरे पास github पर इनमें से एक पूरा सेट है।

क्या आप अधिक कोड जोड़ सकते हैं जो दिखाता है कि कौन सा नियंत्रण सेट किया गया है?

यह दिखाने के लिए कुछ अंश दिए गए हैं कि यह कैसा दिख सकता है।

public static T Find<T>(this UITestControl parent) where T : UITestControl, new() 
    { 
     return new T() { Container = parent }; 
    } 

public static IEnumerable<T> FindAll<T>(this UITestControl parent) where T : UITestControl, new() 
    { 
     return parent.Find<T>().FindAllAsType(); 
    } 

private static IEnumerable<T> FindAllAsType<T>(this T current) where T : UITestControl, new() 
    { 
     if (typeof(T).IsSubclassOf(typeof(HtmlControl))) 
     { 
      return current.FindMatchingControls().Select(x => new T().ExtendFrom(x)); 
     } 
     return current.FindMatchingControls().OfType<T>(); 
    } 

private static IEnumerable<U> FindAllCastTo<T, U>(this T current) where T : UITestControl 
    { 
     return current.FindMatchingControls().Cast<U>(); 
    } 

सबसे अधिक संभावना यह है कि नियंत्रण प्रकार वह नहीं है जिसे आप इसे डालने की कोशिश कर रहे हैं या यह शून्य है।