internal static MethodReference GetEnumeratorMoveNextMethod(TypeReference enumeratorType, TypeReference elementType)
        {
            MethodReference enumeratorMoveNextMethod;
            var             key = new DoubleTypeReferenceKey(enumeratorType, elementType);

            if (instance.enumeratorMoveNextMethods.TryGetValue(key, out enumeratorMoveNextMethod))
            {
                return(enumeratorMoveNextMethod);
            }

            enumeratorMoveNextMethod = GetEnumeratorMoveNextMethodImpl(enumeratorType, elementType);
            instance.enumeratorMoveNextMethods.Add(key, enumeratorMoveNextMethod);
            return(enumeratorMoveNextMethod);
        }
        internal static MethodReference GetGetEnumeratorMethod(TypeReference collectionType, TypeReference elementType)
        {
            MethodReference getEnumeratorMethod;
            var             key = new DoubleTypeReferenceKey(collectionType, elementType);

            if (instance.getEnumeratorMethods.TryGetValue(key, out getEnumeratorMethod))
            {
                return(getEnumeratorMethod);
            }

            getEnumeratorMethod = GetGetEnumeratorMethodImpl(collectionType, elementType);
            instance.getEnumeratorMethods.Add(key, getEnumeratorMethod);
            return(getEnumeratorMethod);
        }