// Replaced with a DLR based binder - but code is preserved in case that approach doesn't // work well performance wise. // See if it's a value type being assigned and // make a copy if it is... private static object PreserveValueType(object value) { if (value == null) { return(null); } // Primitive types are immutable so just return them... Type valueType = value.GetType(); if (valueType.IsPrimitive) { return(value); } PSObject valueAsPSObject = value as PSObject; if (valueAsPSObject != null) { object baseObject = valueAsPSObject.BaseObject; if (baseObject != null) { valueType = baseObject.GetType(); if (valueType.IsValueType && !valueType.IsPrimitive) { return(valueAsPSObject.Copy()); } } } else if (valueType.IsValueType) { return(PSObject.CopyValueType(value)); } return(value); }