2009-08-17 18 views

cevap

7

şey gibi: basit vaka için iyi, ama daha "ilginç" olur

public static IEnumerable<Type> GetSubtypes(Assembly assembly, Type parent) 
{ 
    return assembly.GetTypes() 
        .Where(type => parent.IsAssignableFrom(type)); 
} 

(okuyun: zor) vb

"herhangi T için IEnumerable<T> uygulayan her türlü" bulmak istediğinizde

(Adam'ın dediği gibi, bunu bir uzantı yöntemini kolayca yapabilirsiniz. Yeniden kullanacağınızı düşünüp düşünmediğinize bağlıdır. Uzantı yöntemlerinin yuvalanmamış bir statik sınıfta olması gereken bir acıdır ...)

+0

Her zamanki gibi Skeeted'i aldım. Aynı zamanda bir uzatma yöntemi de yapabilir. –

+0

@Jon, Herhangi bir T "vb" için IEnumerable 'u uygulayan her tür "bulmak istediğinizde" nasıl yapardınız? Ayrıca "uzatma yöntemlerinin yuvalanmamış bir statik sınıfta olması gereken bir acı" dendiniz. Niye ya? Yuvalanmış sınıfları sık sık kullanıyor musunuz? Teşekkürler. –

+0

@Joan: Bir * belirli * 'IEnumerable ' veya * herhangi bir * 'IEnumerable ' (yani T belirtilmiş mi değil mi?) Bir uygulama bulup bulmadığını bilmek gerekir. Pek çok üst düzey statik sınıf yazma eğiliminde değil. Sadece uzatma yöntemleri için bir tane oluşturmak biraz fazladır. aşağıdaki gibi :) –

3
public static IEnumerable<Type> GetTypesThatInheritFrom<T>(this Assembly asm) 
{ 
    var types = from t in asm.GetTypes() 
       where typeof(T).IsAssignableFrom(t) 
       select t; 
    return types; 
} 
İlgili konular