Exemplo n.º 1
0
        public static string ToLocalizedString <T>(T value,
                                                   IStringLocalizer <T> localizer,
                                                   Func <T, T, T> orFunc, Func <T, T, T> andNotFunc)
            where T : struct, Enum
        {
            var knownValues = (T[])_knownValues.GetOrAdd(typeof(T), GetKnownValues);

            StringBuilder sb  = new StringBuilder();
            T             all = default;

            foreach (T resLocFlag in knownValues)
            {
                if (value.HasFlag(resLocFlag))
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(", ");
                    }
                    sb.Append(localizer.GetStringOrFallback(resLocFlag.ToString()));
                }

                all = orFunc(all, resLocFlag);
            }

            T remainder = andNotFunc(value, all);

            if (EqualityComparer <T> .Default.Equals(remainder, default))
            {
                if (sb.Length > 0)
                {
                    sb.Append(", ");
                }
                sb.Append(remainder.ToString());
            }

            return(sb.ToString());
        }