protected void ReadCachedMemberValue(MemberInfo member, int i, MemberValueCache valueCache) { if (IsMemberDictionary[member]) { var keyspread = (ISpread)Pd.OutputPins[member.Name + " Keys"][i]; keyspread.SliceCount = valueCache.Keys.Length; for (int j = 0; j < valueCache.Keys.Length; j++) { keyspread[j] = valueCache.Keys[j]; } var valspread = (ISpread)Pd.OutputPins[member.Name + " Values"][i]; valspread.SliceCount = valueCache.Collection.Length; for (int j = 0; j < valueCache.Collection.Length; j++) { valspread[j] = valueCache.Collection[j]; } } else if (IsMemberEnumerable[member]) { var valspread = (ISpread)Pd.OutputPins[member.Name][i]; valspread.SliceCount = valueCache.Collection.Length; for (int j = 0; j < valueCache.Collection.Length; j++) { valspread[j] = valueCache.Collection[j]; } } else { Pd.OutputPins[member.Name][i] = valueCache.Value; } }
public CQ_Value MemberValueGet(CQ_Content content, object object_this, string valuename) { MemberValueCache c = null; if (!memberValueGetCaches.TryGetValue(valuename, out c)) { c = new MemberValueCache(); memberValueGetCaches[valuename] = c; c.finfo = type.GetField(valuename); if (c.finfo == null) { c.minfo = type.GetMethod("get_" + valuename); if (c.minfo == null) { c.einfo = type.GetEvent(valuename); if (c.einfo == null) { c.type = -1; return(CQ_Value.Null); } else { c.type = 3; } } else { c.type = 2; } } else { c.type = 1; } } if (c.type < 0) { return(CQ_Value.Null); } CQ_Value v = new CQ_Value(); switch (c.type) { case 1: v.SetObject(c.finfo.FieldType, c.finfo.GetValue(object_this)); break; case 2: v.SetObject(c.minfo.ReturnType, c.minfo.Invoke(object_this, null)); break; case 3: v.SetObject(c.einfo.EventHandlerType, new DeleEvent(object_this, c.einfo)); break; } return(v); }
public virtual bool MemberValueSet(CLS_Content content, object object_this, string valuename, object value) { MemberValueCache c; if (!memberValuesetCaches.TryGetValue(valuename, out c)) { c = new MemberValueCache(); memberValuesetCaches[valuename] = c; c.finfo = type.GetField(valuename); if (c.finfo == null) { c.minfo = type.GetMethod("set_" + valuename); if (c.minfo == null) { c.type = -1; return false; } else { c.type = 2; } } else { c.type = 1; } } if (c.type < 0) return false; if (c.type == 1) { if (value != null && value.GetType() != c.finfo.FieldType) { value = content.environment.GetType(value.GetType()).ConvertTo(content, value, c.finfo.FieldType); } c.finfo.SetValue(object_this, value); } else { var ptype = c.minfo.GetParameters()[0].ParameterType; if (value != null && value.GetType() != ptype) { value = content.environment.GetType(value.GetType()).ConvertTo(content, value, ptype); } c.minfo.Invoke(object_this, new object[] { value }); } return true; ////先操作File //var targetf = type.GetField(valuename); //if (targetf != null) //{ // if (value != null && value.GetType() != targetf.FieldType) // { // value = content.environment.GetType(value.GetType()).ConvertTo(content, value, targetf.FieldType); // } // targetf.SetValue(object_this, value); // return; //} //else //{ // var methodf = type.GetMethod("set_" + valuename); // if (methodf != null) // { // var ptype = methodf.GetParameters()[0].ParameterType; // if (value != null && value.GetType() != ptype) // { // value = content.environment.GetType(value.GetType()).ConvertTo(content, value, ptype); // } // methodf.Invoke(object_this, new object[] { value }); // return; // } //} //throw new NotImplementedException(); }
public virtual CLS_Content.Value MemberValueGet(CLS_Content environment, object object_this, string valuename) { MemberValueCache c; if (!memberValuegetCaches.TryGetValue(valuename, out c)) { c = new MemberValueCache(); memberValuegetCaches[valuename] = c; c.finfo = type.GetField(valuename); if (c.finfo == null) { c.minfo = type.GetMethod("get_" + valuename); if (c.minfo == null) { c.einfo = type.GetEvent(valuename); if (c.einfo == null) { c.type = -1; return null; } else { c.type = 3; } } else { c.type = 2; } } else { c.type = 1; } } if (c.type < 0) return null; CLS_Content.Value v = new CLS_Content.Value(); switch (c.type) { case 1: v.value = c.finfo.GetValue(object_this); v.type = c.finfo.FieldType; break; case 2: v.value = c.minfo.Invoke(object_this, null); v.type = c.minfo.ReturnType; break; case 3: v.value = new DeleEvent(object_this, c.einfo); v.type = c.einfo.EventHandlerType; break; } return v; //var targetf = type.GetField(valuename); //if (targetf != null) //{ // CLS_Content.Value v = new CLS_Content.Value(); // v.value = targetf.GetValue(object_this); // v.type = targetf.FieldType; // return v; //} //var targetp = type.GetProperty(valuename); //if (targetp != null) //{ // CLS_Content.Value v = new CLS_Content.Value(); // v.value = targetp.GetValue(object_this, null); // v.type = targetp.PropertyType; // return v; //} //else //{//用get set 方法替代属性操作,AOT环境属性操作有问题 // var methodf = type.GetMethod("get_" + valuename); // if (methodf != null) // { // CLS_Content.Value v = new CLS_Content.Value(); // v.value = methodf.Invoke(object_this, null); // v.type = methodf.ReturnType; // return v; // } //var targetf = type.GetField(valuename); //if (targetf != null) //{ // CLS_Content.Value v = new CLS_Content.Value(); // v.value = targetf.GetValue(object_this); // v.type = targetf.FieldType; // return v; //} // else // { // System.Reflection.EventInfo targete = type.GetEvent(valuename); // if (targete != null) // { // CLS_Content.Value v = new CLS_Content.Value(); // v.value = new DeleEvent(object_this, targete); // v.type = targete.EventHandlerType; // return v; // } // } //} //return null; }
public virtual bool MemberValueSet(CLS_Content content, object object_this, string valuename, object value) { MemberValueCache c; if (!memberValuesetCaches.TryGetValue(valuename, out c)) { c = new MemberValueCache(); memberValuesetCaches[valuename] = c; c.finfo = type.GetField(valuename); if (c.finfo == null) { c.minfo = type.GetMethod("set_" + valuename); if (c.minfo == null) { c.type = -1; return(false); } else { c.type = 2; } } else { c.type = 1; } } if (c.type < 0) { return(false); } if (c.type == 1) { if (value != null && value.GetType() != c.finfo.FieldType) { value = content.environment.GetType(value.GetType()).ConvertTo(content, value, c.finfo.FieldType); } c.finfo.SetValue(object_this, value); } else { var ptype = c.minfo.GetParameters()[0].ParameterType; if (value != null && value.GetType() != ptype) { value = content.environment.GetType(value.GetType()).ConvertTo(content, value, ptype); } c.minfo.Invoke(object_this, new object[] { value }); } return(true); ////先操作File //var targetf = type.GetField(valuename); //if (targetf != null) //{ // if (value != null && value.GetType() != targetf.FieldType) // { // value = content.environment.GetType(value.GetType()).ConvertTo(content, value, targetf.FieldType); // } // targetf.SetValue(object_this, value); // return; //} //else //{ // var methodf = type.GetMethod("set_" + valuename); // if (methodf != null) // { // var ptype = methodf.GetParameters()[0].ParameterType; // if (value != null && value.GetType() != ptype) // { // value = content.environment.GetType(value.GetType()).ConvertTo(content, value, ptype); // } // methodf.Invoke(object_this, new object[] { value }); // return; // } //} //throw new NotImplementedException(); }
public virtual CLS_Content.Value MemberValueGet(CLS_Content environment, object object_this, string valuename) { MemberValueCache c; if (!memberValuegetCaches.TryGetValue(valuename, out c)) { c = new MemberValueCache(); memberValuegetCaches[valuename] = c; c.finfo = type.GetField(valuename); if (c.finfo == null) { c.minfo = type.GetMethod("get_" + valuename); if (c.minfo == null) { c.einfo = type.GetEvent(valuename); if (c.einfo == null) { c.type = -1; return(null); } else { c.type = 3; } } else { c.type = 2; } } else { c.type = 1; } } if (c.type < 0) { return(null); } CLS_Content.Value v = new CLS_Content.Value(); switch (c.type) { case 1: v.value = c.finfo.GetValue(object_this); v.type = c.finfo.FieldType; break; case 2: v.value = c.minfo.Invoke(object_this, null); v.type = c.minfo.ReturnType; break; case 3: v.value = new DeleEvent(object_this, c.einfo); v.type = c.einfo.EventHandlerType; break; } return(v); //var targetf = type.GetField(valuename); //if (targetf != null) //{ // CLS_Content.Value v = new CLS_Content.Value(); // v.value = targetf.GetValue(object_this); // v.type = targetf.FieldType; // return v; //} //var targetp = type.GetProperty(valuename); //if (targetp != null) //{ // CLS_Content.Value v = new CLS_Content.Value(); // v.value = targetp.GetValue(object_this, null); // v.type = targetp.PropertyType; // return v; //} //else //{//用get set 方法替代属性操作,AOT环境属性操作有问题 // var methodf = type.GetMethod("get_" + valuename); // if (methodf != null) // { // CLS_Content.Value v = new CLS_Content.Value(); // v.value = methodf.Invoke(object_this, null); // v.type = methodf.ReturnType; // return v; // } //var targetf = type.GetField(valuename); //if (targetf != null) //{ // CLS_Content.Value v = new CLS_Content.Value(); // v.value = targetf.GetValue(object_this); // v.type = targetf.FieldType; // return v; //} // else // { // System.Reflection.EventInfo targete = type.GetEvent(valuename); // if (targete != null) // { // CLS_Content.Value v = new CLS_Content.Value(); // v.value = new DeleEvent(object_this, targete); // v.type = targete.EventHandlerType; // return v; // } // } //} //return null; }
protected void AssignMemberValue(MemberInfo member, object input, int i, MemberValueCache valueCache) { var memberValue = valueCache?.Getter(input) ?? GetMemberValue(member, input); if (IsMemberDictionary[member]) { var keyspread = (ISpread)Pd.OutputPins[member.Name + " Keys"][i]; var valuespread = (ISpread)Pd.OutputPins[member.Name + " Values"][i]; keyspread.SliceCount = valuespread.SliceCount = 0; if (memberValue == null) { return; } var dict = (IDictionary)memberValue; foreach (var k in dict.Keys) { keyspread.SliceCount++; keyspread[-1] = TransformOutput(k, member, i); } foreach (var v in dict.Values) { valuespread.SliceCount++; valuespread[-1] = TransformOutput(v, member, i); } if (valueCache != null) { valueCache.Collection = valuespread.ToObjectArray(valueCache.Collection); valueCache.Keys = keyspread.ToObjectArray(valueCache.Keys); } } else if (IsMemberEnumerable[member]) { var spread = (ISpread)Pd.OutputPins[member.Name][i]; spread.SliceCount = 0; if (memberValue == null) { return; } var enumerable = (IEnumerable)memberValue; foreach (var o in enumerable) { spread.SliceCount++; spread[-1] = TransformOutput(o, member, i); } if (valueCache != null) { valueCache.Collection = spread.ToObjectArray(valueCache.Collection); } } else { var val = TransformOutput(memberValue, member, i); Pd.OutputPins[member.Name][i] = val; if (valueCache != null) { valueCache.Value = val; } } }
public bool MemberValueSet(CQ_Content content, object object_this, string valuename, CQ_Value value) { MemberValueCache c; if (!memberValueSetCaches.TryGetValue(valuename, out c)) { c = new MemberValueCache(); memberValueSetCaches[valuename] = c; c.finfo = type.GetField(valuename); if (c.finfo == null) { c.minfo = type.GetMethod("set_" + valuename); // var mss = type.GetMethods(); if (c.minfo == null) { if (type.GetMethod("add_" + valuename) != null) { c.type = 3;//event; } else { c.type = -1; return(false); } } else { c.type = 2; } } else { c.type = 1; } } if (c.type < 0) { return(false); } object obj = value.GetObject(); if (c.type == 1) { if (obj != null && obj.GetType() != c.finfo.FieldType) { obj = CQuark.AppDomain.ConvertTo(obj, c.finfo.FieldType); } c.finfo.SetValue(object_this, obj); } else if (c.type == 2) { var ptype = c.minfo.GetParameters()[0].ParameterType; if (obj != null && obj.GetType() != ptype) { obj = CQuark.AppDomain.ConvertTo(obj, ptype); } c.minfo.Invoke(object_this, new object[] { obj }); } return(true); }