IronRuby.Builtins.ModuleOps.Of C# (CSharp) Method

Of() private method

private Of ( RubyModule self ) : RubyModule
self RubyModule
return RubyModule
        public static RubyModule/*!*/ Of(RubyModule/*!*/ self, [NotNullItems]params object/*!*/[]/*!*/ typeArgs) {
            if (self.TypeTracker == null) {
                throw RubyExceptions.CreateArgumentError("'{0}' is not a type", self.Name);
            }

            Type type = self.TypeTracker.Type;
            int provided = typeArgs.Length;

            if (provided == 1 && type == typeof(Array)) {
                Type elementType = Protocols.ToType(self.Context, typeArgs[0]);
                Type arrayType;
                try {
                    arrayType = elementType.MakeArrayType();
                } catch (Exception) {
                    throw RubyExceptions.CreateTypeError(
                        "Cannot create array type for `{0}'", self.Context.GetTypeName(elementType, true)
                    );
                }
                return self.Context.GetModule(arrayType);
            }

            if (!type.IsGenericTypeDefinition) {
                if (provided > 0) {
                    throw RubyExceptions.CreateArgumentError("`{0}' is not a generic type definition", self.Name);
                }
                return self;
            }

            int required = type.GetGenericArguments().Length;
            if (required != provided) {
                throw RubyExceptions.CreateArgumentError("Type `{0}' requires {1} generic type arguments, {2} provided", self.Name, required, provided);
            }

            Type concreteType = type.MakeGenericType(Protocols.ToTypes(self.Context, typeArgs));
            return self.Context.GetModule(concreteType);
        }

Same methods

ModuleOps::Of ( RubyModule self, int genericArity ) : RubyModule