CSLE.RegHelper_TypeFunction.IndexSet C# (CSharp) Method

IndexSet() public method

public IndexSet ( CLS_Content environment, object object_this, object key, object value ) : void
environment CLS_Content
object_this object
key object
value object
return void
        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 });
        }
    }