'dan bağımsız olarak uygulanıp uygulanmadığını denetleme Şu anki projemde çok fazla yansıtma yapıyorum ve her şeyi düzenli tutmak için birkaç yardımcı yöntem sağlamaya çalışıyorum.Tür veya örneğinin IE T
public static bool IsEnumerable(this Type type)
{
return (type is IEnumerable);
}
public static bool IsEnumerable(this object obj)
{
return (obj as IEnumerable != null);
}
Ben onları test: -
bir tür veya örnek IEnumerable uygulayan olmadığını belirlemek için yöntemler bir çift sunmak istiyorum bakılmaksızın İşte tip T. şu anda ne var kullanarak:
Debug.WriteLine("Type IEnumerable: " + typeof(IEnumerable).IsEnumerable());
Debug.WriteLine("Type IEnumerable<>: " + typeof(IEnumerable<string>).IsEnumerable());
Debug.WriteLine("Type List: " + typeof(List<string>).IsEnumerable());
Debug.WriteLine("Type string: " + typeof(string).IsEnumerable());
Debug.WriteLine("Type DateTime: " + typeof(DateTime).IsEnumerable());
Debug.WriteLine("Instance List: " + new List<string>().IsEnumerable());
Debug.WriteLine("Instance string: " + "".IsEnumerable());
Debug.WriteLine("Instance DateTime: " + new DateTime().IsEnumerable());
Ben sonuç olarak bu olsun:
Type IEnumerable: False
Type IEnumerable<>: False
Type List: False
Type string: False
Type DateTime: False
Instance List: True
Instance string: True
Instance DateTime: False
tip yöntemi yapmak hiç işe görünmüyor - Ben en azından doğrudan System.Collections.IEnumerable
maç için bir gerçek bekleniyordu.
Dizenin teknik olarak numaralandırılabileceğinin farkındayım, ancak birkaç uyarı da olsa. İdeal olarak bu durumda, bunun için yanlış dönmek için yardımcı yönteme ihtiyacım olacaktır. Doğru olması için tanımlı bir IEnumerable<T>
türüyle örneklere ihtiyacım var.
Muhtemelen oldukça açık bir şeyi özlüyorum - kimse bana doğru yönde işaret edebilir mi?
Soruyu anlamıyorum. 'Typeof()' niçin herhangi bir tür 'true' geri dönmediği açıktır. _type object_'nin arayüzü kendisi değil, arabirimi uygulayıp uygulamadığını sorarsınız. Belki de 'IsAssignableFrom() 'istiyorsun? Ama hangi yolla 'string' uygun değil? "Tanımlanmış bir IEnumerable" türü var. –
Evet, bu tür bir sorun oldu - Ben tüm gün türleri ve örnekler arasında atlama yansıma yuva bakıyordu ve biraz karıştı daha var! 'string' yeterlilik kazanır, ancak bu durumda gerçekten onu yönetmem gerekiyor - muhtemelen bu aşamada bir yöntem isimlendirme meselesi. Sanırım bunu olduğu gibi bırakacağım ve ilk önce dizgiyi kontrol eden bir tane daha ekleyeceğim. – Octopoid
@JeroenMostert ile katılıyorum ... "yinelenen" bir tür yansıtma kullanarak IEnumerable 'uygulayıp uygulamadığını soruyor, bu bir tür farklı bir şey olduğunu ve farklı bir çözüm gerektiriyor, 'IEnumerable' uygulamak olup olmadığını soruyor (kabul edilen farklı yanıtlar tarafından kanıtlandığı gibi) –
Jcl