SORU
13 Temmuz 2009, PAZARTESİ


Bir yazın var mı diye bakıyorum uygulayan bir genel arabirim

Hadi bir türü var, MyType söylüyorlar. Aşağıdaki: yapmak istiyorum

  1. Eğer MyType IList arabirimi, bazı T. için uygular öğrenin
  2. Eğer cevap (1) evet ise, T ne olduğunu öğrenin.

Bunu yapmanın yolu Getİnterface gibi görünüyor(), ama bu sadece sana özel bir adı ile arama yapmanıza olanak sağlar. İ aramak için bir yoldur "şeklindeki tüm arayüzleri" (mümkünse am ... ayrıca eğer arayüzü eğer işe yaradıysa yararlı IList bir adres.) IList

İlgili: How to determine if a type implements a specific generic interface type

CEVAP
13 Temmuz 2009, PAZARTESİ


// this conditional is necessary if myType can be an interface,
// because an interface doesn't implement itself: for example,
// typeof (IList<int>).GetInterfaces () does not contain IList<int>!
if (myType.IsInterface && myType.IsGenericType && 
    myType.GetGenericTypeDefinition () == typeof (IList<>))
    return myType.GetGenericArguments ()[0] ;

foreach (var i in myType.GetInterfaces ())
    if (i.IsGenericType && i.GetGenericTypeDefinition () == typeof (IList<>))
        return i.GetGenericArguments ()[0] ;

Düzenleme:myType uygular hatta IDerivedFromList<> ama doğrudan değil IList<>, IList<> Dizi GetInterfaces() tarafından döndürülen görünecektir.

Güncelleme:myType * * * * kenar vaka için bir kontrol eklenir, söz konusu genel arabirimi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006
  • LivestrongWoman

    LivestrongWo

    1 Aralık 2011
  • Tire Rack

    Tire Rack

    31 Mayıs 2007