System.DefaultBinder.ReorderParams C# (CSharp) Method

ReorderParams() private static method

private static ReorderParams ( int paramOrder, Object vars ) : void
paramOrder int
vars Object
return void
        private static void ReorderParams(int[] paramOrder,Object[] vars)
        {
            // This is an O(n) algorithm for sorting the array.
            // For each position in the paramOrder array we swap the value
            //  stored there into it's position until we swap position i into i.
            //  This moves things exactly the number of items out of position.
            for (int i=0;i<vars.Length;i++) {
                while (paramOrder[i] != i) {
                    int x = paramOrder[paramOrder[i]];
                    Object v = vars[paramOrder[i]];
                    
                    paramOrder[paramOrder[i]] = paramOrder[i];
                    vars[paramOrder[i]] = vars[i];
                    
                    paramOrder[i] = x;
                    vars[i] = v;
                }
            }
        }
        

Usage Example

        // Token: 0x06000D97 RID: 3479 RVA: 0x00029884 File Offset: 0x00027A84
        public override void ReorderArgumentArray(ref object[] args, object state)
        {
            DefaultBinder.BinderState binderState = (DefaultBinder.BinderState)state;
            DefaultBinder.ReorderParams(binderState.m_argsMap, args);
            if (!binderState.m_isParamArray)
            {
                if (args.Length > binderState.m_originalSize)
                {
                    object[] array = new object[binderState.m_originalSize];
                    Array.Copy(args, 0, array, 0, binderState.m_originalSize);
                    args = array;
                }
                return;
            }
            int num = args.Length - 1;

            if (args.Length == binderState.m_originalSize)
            {
                args[num] = ((object[])args[num])[0];
                return;
            }
            object[] array2 = new object[args.Length];
            Array.Copy(args, 0, array2, 0, num);
            int i    = num;
            int num2 = 0;

            while (i < array2.Length)
            {
                array2[i] = ((object[])args[num])[num2];
                i++;
                num2++;
            }
            args = array2;
        }
All Usage Examples Of System.DefaultBinder::ReorderParams