view Implab.ServiceHost/Unity/TypeReference.cs @ 268:0be8a6ae8307 v3

Implemented typereference parser
author cin
date Sun, 22 Apr 2018 15:29:10 +0300
parents 6b3e5c48131b
children 6691aff01de1
line wrap: on
line source

using System;
using System.Linq;
using System.Text;

namespace Implab.ServiceHost.Unity {
    public class TypeReference {
        public string TypeName { get; set; }

        public string Namespace { get; set; }

        public TypeReference[] GenericParameters { get; set; }

        public bool IsArray { get; set; }

        public bool IsOpenGeneric {
            get {
                return GenericParameters!=null && GenericParameters.Contains(null);
            }
        }

        public bool IsGeneric {
            get {
                return GenericParameters != null && GenericParameters.Length > 0;
            }
        }

        public override string ToString() {
            var builder = new StringBuilder();

            if (!string.IsNullOrEmpty(Namespace)) {
                builder.Append(Namespace);
                builder.Append('.');
            }

            if (!string.IsNullOrEmpty(TypeName)) {
                builder.Append(TypeName);
            } else {
                builder.Append("__unnamed__");
            }

            if (GenericParameters != null && GenericParameters.Length > 0) {
                builder.Append('{');
                for(var i = 0; i < GenericParameters.Length; i++) {
                    if (i > 0)
                        builder.Append(',');
                    builder.Append(GenericParameters[i]);
                }
                builder.Append('}');
            }

            return builder.ToString();
        }
        public static TypeReference Parse(string text) {
            var parser = new TypeReferenceParser(text);
            return parser.Parse();
        }
    }
}