public class Object { public int Property1; public int Property2; } Objects = new List(); -- start pseudo code -- function Filter( $Objects, $property, $value ) { $ObjectsFiltered = new List(); foreach( $Objects as $Key => $Object ) { if( $Object -> $property = $value ) { $ObjectsFiltered.Add( $Object ); } } return $ObjectsFiltered; } Being able to refer to a property dynamically (bad term), but defined at run time does offer some advantages ...