Given an object possibly containing an IEnumerable<T>
, how would I check that an IEnumerable<T>
property exists, and if it does, loop over all values in that IEnumerable<T>
using reflection, for any T
?
foreach (var property in yourObject.GetType().GetProperties()) { if (property.PropertyType.GetInterfaces().Contains(typeof(IEnumerable))) { foreach (var item in (IEnumerable)property.GetValue(yourObject, null)) { //do stuff } } }
Well, you can test it as Aghilas said and, once tested and confirmed as IEnumerable you can do something like this:
public static bool IsEnumerable( object myProperty ) { if( typeof(IEnumerable).IsAssignableFrom(myProperty .GetType()) || typeof(IEnumerable<>).IsAssignableFrom(myProperty .GetType())) return true; return false; } public static string Iterate( object myProperty ) { var ie = myProperty as IEnumerable; string s = string.Empty; if (ie != null) { bool first = true; foreach( var p in ie ) { if( !first ) s += ", "; s += p.ToString(); first = false; } } return s; } foreach( var p in myObject.GetType().GetProperties() ) { var myProperty = p.GetValue( myObject ); if( IsEnumerable( myProperty ) ) { Iterate( myProperty ); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With