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);
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;
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 if(c.type==2)
{
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();
}