2012-12-06 24 views
5

Otomasyon kodumuza jenerikler eklemeye çalışıyorum ve bu yüzden WpfControl'ü T tipi WpfControl türünde sınırlandırılan genel T türüne dökmeye çalışıyorum. Ben null döndürür jenerik tipine tipi WpfControl taşımaktadır kontrolünü döküm am zamanKodlanmış UI Çalışmıyor aşağı döküm çalışmıyor

return control as T; 

T daima henüz WpfControl çocuğu olacak. Bu hala null döndürür

var childControl = control as WpfTabList; 

: Ben de böyle örnek bir şey için kesin çocuk tipine kontrolünü döküm çalıştık. Herhangi bir benzer sorun yaşayan var mı? Eğer genel yöntem geteric tip şartname kullanın lütfen yılında

İlk:

bu WpfControl Class

+1

Her şey açıkladığınız gibi olursa, o zaman çalışmalıdır. Kaybettiğin bir şey olduğundan şüpheliyim. Size şunu önerebilirim: a) Bir hata ayıklayıcısına geçin ve "kontrol" türünün çalışma zamanında olduğunu görün ve b) Daha eksiksiz kod gönderin. –

+1

Ayrıca, kontrolün boş olmadığını kontrol edin! Bu beni daha önce yakaladı. –

+0

Burada, kurucuyu çağıran satır - lütfen ekleyebilirsiniz. (control = new ....) muhtemelen bu satırı bulacağınız zaman kendi başınıza çözersiniz;) (ama olmasa da - hala burdayım) –

cevap

0

bazı recomendations bakın.

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

senin varsayımı bir misconsistnace vardır ve implemtation gibi çocuk kontrolü TabList değilken bir WpfControl olguda yanlış WpfTabList bir eşleştirmeye çalışıyoruz.

0

Bu kesinlikle çalışır. Bunlarımın tümü github'umda var.

Hangi kontrolün ayarlandığını gösteren daha fazla kod ekleyebilir misiniz?

Bunun nasıl görüneceğini göstermek için bazı alıntılar vardır.

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

büyük olasılıkla vaka kontrol türü için ya da boş olduğunu bunu yayınlamaya çalışıyorsanız değil ne olduğudur.

İlgili konular