How to use the field calculator using ArcObjects

ICalculator calc;
ICursor cur;

calc = new CalculatorClass();
calc.Cursor = cur = ((IDisplayTable)targetLayer).SearchDisplayTable(null, false);
calc.Field = string.Format("{0}.{1}", targetLayer.Name, targetFieldName);
calc.Expression = string.Format("[{0}.{1}]", ((IDataset)sourceTable).Name, sourceFieldName);
calc.Calculate();

// release cur here
if (Marshal.IsComObject(cur ))
{
    Marshal.FinalReleaseComObject(cur );
}

// this garbage collection makes Geoprocessing tools crash
//GC.Collect();
GC.WaitForPendingFinalizers();