public virtual void IndexSet(CLS_Content environment, object object_this, object key, object value)
{
if (indexSetCache == null)
{
indexSetCache = type.GetMethod("set_Item");
indexSetCachekeyfirst = true;
if (indexSetCache == null)
{
indexSetCache = type.GetMethod("SetValue", new Type[] { typeof(object), typeof(int) });
indexSetCachekeyfirst = false;
}
var pp = indexSetCache.GetParameters();
indexSetCachetype1 = pp[0].ParameterType;
indexSetCachetype2 = pp[1].ParameterType;
}
//else
if (indexSetCachekeyfirst)
{
if (key != null && key.GetType() != indexSetCachetype1)
key = environment.environment.GetType(key.GetType()).ConvertTo(environment, key, (CSLE.CLType)indexSetCachetype1);
if (value != null && value.GetType() != indexSetCachetype2)
value = environment.environment.GetType(value.GetType()).ConvertTo(environment, value, (CSLE.CLType)indexSetCachetype2);
indexSetCache.Invoke(object_this, new object[] { key, value });
}
else
{
if (value != null && value.GetType() != indexSetCachetype1)
value = environment.environment.GetType(value.GetType()).ConvertTo(environment, value, (CSLE.CLType)indexSetCachetype1);
if (key != null && key.GetType() != indexSetCachetype2)
key = environment.environment.GetType(key.GetType()).ConvertTo(environment, key, (CSLE.CLType)indexSetCachetype2);
indexSetCache.Invoke(object_this, new object[] { value, key });
}
//var m = type.GetMethods();
//var targetop = type.GetMethod("set_Item");
//if (targetop == null)
//{
// //targetop = type.GetMethod("Set");
// targetop = type.GetMethod("SetValue", new Type[] { typeof(object), typeof(int) });
// targetop.Invoke(object_this, new object[] { value, key });
// return;
//}
//targetop.Invoke(object_this, new object[] { key, value });
}
}