KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I want to itterate over an indexed property that I only have access to via reflection, but ( and I say this in the full knowledge that there's probably an embarrassingly simple answer, MSDN/Google fail =/ ) I cannot find/think of a way besides incrementing a counter over the PropertyInfo.GetValue(prop, counter) until the TargetInvocationException is thrown. ala: foreach ( PropertyInfo prop in obj.GetType().GetProperties() ) { if ( prop.GetIndexParameters().Length > 0 ) { // get an integer count value, by incrementing a counter until the exception is thrown int count = 0; while ( true ) { try { prop.GetValue( obj, new object[] { count } ); count++; } catch ( TargetInvocationException ) { break; } } for ( int i = 0; i < count; i++ ) { // process the items value process( prop.GetValue( obj, new object[] { i } ) ); } } } now, there are some issues with this... very ugly.. solution.. what if it's multi-dimensional or not indexed by integers for example... heres the test code I'm using to try and get it working if anyone needs it. If anyone's interested I'm making a custom caching system and .Equals doesn't cut it. static void Main() { object str = new String( ( "Hello, World" ).ToArray() ); process( str ); Console.ReadKey(); } static void process( object obj ) { Type type = obj.GetType(); PropertyInfo[] properties = type.GetProperties(); // if this obj has sub properties, apply this process to those rather than this. if ( properties.Length > 0 ) { foreach ( PropertyInfo prop in properties ) { // if it's an indexed type, run for each
Tags (comma-separated)
Save Edits
Cancel