private Dispatcher CreateSetter(MemberInfo member)
{
switch (member.MemberType)
{
case MemberTypes.Field:
{
FieldInfo field = (FieldInfo)member;
return
delegate(object o, object[] arguments) { return RuntimeServices.SetSlice(field.GetValue(o), "", arguments); };
}
case MemberTypes.Property:
{
PropertyInfo property = (PropertyInfo)member;
if (property.GetIndexParameters().Length > 0)
{
MethodInfo setter = property.GetSetMethod(true);
if (null == setter) throw MissingField();
return EmitMethodDispatcher(setter);
}
return delegate(object o, object[] arguments)
{
return RuntimeServices.SetSlice(RuntimeServices.GetProperty(o, _name), "", arguments);
};
}
default:
{
throw MissingField();
}
}
}