public int Compare(object x, object y) { StockData leftObj = x as StockData; StockData rightObj = y as StockData; //Retrieve field meta data FieldInfo leftField = leftObj.GetType().GetField(fldName); FieldInfo rightField = rightObj.GetType().GetField(fldName); //Retrieve field value object leftValue = leftField.GetValue(leftObj); object rightValue = rightField.GetValue(rightObj); //Retrieve method meta-data MethodInfo leftMethod = leftField.FieldType.GetMethod("CompareTo", new Type[] { leftValue.GetType() }); //invoke the method object retValue = leftMethod.Invoke(leftValue, new object[] { rightValue }); return((int)retValue); }