public static SetterDelegate CreateSetterDelegate(Type type, PropertyInfo propertyInfo)
{
MethodInfo setMethodInfo = propertyInfo.GetSetMethod(true);
#if !CompactFramework
DynamicMethod dynamicSet = CreateDynamicSetMethod(type);
ILGenerator setGenerator = dynamicSet.GetILGenerator();
setGenerator.Emit(OpCodes.Ldarg_0);
setGenerator.Emit(OpCodes.Ldarg_1);
UnboxIfNeeded(setMethodInfo.GetParameters()[0].ParameterType, setGenerator);
setGenerator.Emit(OpCodes.Call, setMethodInfo);
setGenerator.Emit(OpCodes.Ret);
return (SetterDelegate)dynamicSet.CreateDelegate(typeof(SetterDelegate));
#else
return (obj, newValue) => setMethodInfo.Invoke(obj, new[] { newValue });
#endif
}