Ejemplo n.º 1
0
 /// <summary>
 /// </summary>
 /// <param name="t"></param>
 /// <param name="settings">Используем одни настройки для всех типов.</param>
 /// <returns></returns>
 public static string GetNormalTypeName(this Type t, TypeNamingSettings settings)
 {
     return(GetNormalTypeName(
                t,
                (type, s) =>
     {
         s.WithNamespace = settings.WithNamespace;
     }));
 }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="typeSettingsResolver">Вызывается каждый раз для получения имени какого-нибудь типа,
        /// включая внутренние generic типы.</param>
        /// <returns></returns>
        public static string GetNormalTypeName(this Type t, Action <Type, TypeNamingSettings> typeSettingsResolver)
        {
            var settings = new TypeNamingSettings();

            typeSettingsResolver?.Invoke(t, settings);
            bool withNamespace = settings.WithNamespace;

            var key = t.FullName + "_" + withNamespace.ToString();

            if (_normalTypeNamesCahce.ContainsKey(key))
            {
                return(_normalTypeNamesCahce[key]);
            }

            var name = withNamespace ? t.Namespace + "." : "";

            if (t.IsGenericType)
            {
                //Remove generic declaration part
                name += t.Name.Remove(t.Name.IndexOf("`", StringComparison.Ordinal)) + "<";
                var genericArgs = t.GetGenericArguments();
                var firstArg    = genericArgs[0];
                name += GetNormalTypeName(firstArg, typeSettingsResolver);
                for (var i = 1; i < genericArgs.Length; i++)
                {
                    name += ", " + GetNormalTypeName(genericArgs[i], typeSettingsResolver);
                }

                name += ">";
                return(name);
            }

            var res = name + t.Name;

            _normalTypeNamesCahce[key] = res;
            return(res);
        }