public bool sgsSetPropertyByName(Variable key, Context ctx, bool isprop, int valueOnStack) { SGSClassInfo cinfo = GetClassInfo(); SGSPropInfo propinfo; if (!cinfo.props.TryGetValue(key, out propinfo) || !propinfo.canWrite) { if (backingStore != null) { return(backingStore.SetSubItem(key, ctx.StackItem(valueOnStack), isprop)); } return(false); } if (propinfo.parseVarMethod == null) { throw new SGSException(RC.ENOTFND, string.Format( "Property cannot be set - no Context.ParseVar method exists that supports this type ({0})", propinfo.propType)); } object[] args = new object[] { null, ctx.StackItem(valueOnStack) }; propinfo.parseVarMethod.Invoke(ctx, args); if (propinfo.info is FieldInfo) { (propinfo.info as FieldInfo).SetValue(this, args[0]); } else // PropertyInfo { (propinfo.info as PropertyInfo).SetValue(this, args[0], null); } return(true); }