public void SetInstanceProperty(object target, string propName, object value)
{
value = MarshallToClr(value);
Func<bool> setProp = () =>
{
var prop = target.GetType().Property(propName, InstanceFlags);
if (prop != null)
{
var res = value;
if (TryConvert(prop.PropertyType, target, ref res))
{
prop.SetValue(target, res, null);
return true;
}
}
return false;
};
Func<bool> setField = () =>
{
var field = target.GetType().Field(propName, InstanceFlags);
if (field != null)
{
var res = value;
if (TryConvert(field.FieldType, target, ref res))
{
field.SetValue(target, res);
return true;
}
}
return false;
};
if (char.IsLower(propName[0]))
{
if (setField() || setProp())
return;
}
else
{
if (setProp() || setField())
return;
}
throw ErrorFactory.CreateClrError(string.Format("Cannot resolve field or property {0} of type {1}", propName, target.GetType()));
}