コード例 #1
0
ファイル: TypeEmitter.cs プロジェクト: nils-a/bakery
        public string GetString(TypeSignature signature, TypeEmitOptions option)
        {
            var temp = new StringWriter();

            Write(temp, signature, option);
            return(temp.ToString());
        }
コード例 #2
0
ファイル: TypeEmitter.cs プロジェクト: nils-a/bakery
        public void Write(TextWriter writer, TypeSignature signature, TypeEmitOptions options)
        {
            if (signature.IsGenericArgumentType)
            {
                if ((options & TypeEmitOptions.Name) == TypeEmitOptions.Name)
                {
                    writer.Write(signature.Name);
                }
                return;
            }

            // Write type namespace?
            if (options.HasFlag(TypeEmitOptions.Namespace))
            {
                if (options.HasFlag(TypeEmitOptions.Name))
                {
                    writer.Write(signature.Namespace.Name);
                    writer.Write(".");
                }
                else
                {
                    writer.Write(signature.Namespace.Name);
                }
            }

            // Write type name?
            if (options.HasFlag(TypeEmitOptions.Name))
            {
                writer.Write(signature.Name);

                // Write generic arguments/parameters?
                if (options.HasFlag(TypeEmitOptions.GenericParameters))
                {
                    if (signature.GenericArguments.Count != 0)
                    {
                        // Generic arguments
                        writer.Write("<");
                        var result = new List <string>();
                        foreach (var argument in signature.GenericArguments)
                        {
                            result.Add(argument);
                        }
                        writer.Write(string.Join(",", result));
                        writer.Write(">");
                    }
                    else if (signature.GenericParameters.Count != 0)
                    {
                        // Generic parameters
                        writer.Write("<");
                        var parameterIndex = 0;
                        foreach (var parameter in signature.GenericParameters)
                        {
                            parameterIndex++;
                            Write(writer, parameter, options);
                            if (parameterIndex != signature.GenericParameters.Count)
                            {
                                writer.Write(", ");
                            }
                        }
                        writer.Write(">");
                    }
                }

                if (signature.IsArray)
                {
                    // TODO: Handle dimensions
                    writer.Write("[]");
                }
            }
        }