/// <summary>
        /// Получить список значений перечисления, которые будут использоваться в интерфейсе пользователя
        /// </summary>
        /// <param name="enumType">Тип перечисления</param>
        /// <param name="values">Значения из перечисления</param>
        /// <param name="include">Включить или исключить значения из values</param>
        /// <returns></returns>
        public static List <EnumWrapper> GetEnumValues(Type enumType, EnumCollection values = null, Boolean include = true)
        {
            if (EnumValues == null)
            {
                EnumValues = new Dictionary <Type, List <EnumWrapper> >();
            }
            if (!EnumValues.ContainsKey(enumType))
            {
                object[] attrs = enumType.GetCustomAttributes(typeof(Rekod.Services.TypeResourceAttribute), false);
                if (attrs.Count() == 1)
                {
                    List <EnumWrapper> enumWrappers = new List <EnumWrapper>();
                    foreach (System.Enum enumValue in Enum.GetValues(enumType))
                    {
                        enumWrappers.Add(new EnumWrapper()
                        {
                            Value = enumValue
                        });
                    }
                    EnumValues.Add(enumType, enumWrappers);
                }
            }
            List <EnumWrapper> result = null;

            if (EnumValues.ContainsKey(enumType))
            {
                if (values == null)
                {
                    result = EnumValues[enumType];
                }
                else
                {
                    result =
                        (from EnumWrapper enumWrapper
                         in EnumValues[enumType]
                         where values.Contains(enumWrapper.Value) == include
                         select enumWrapper).ToList();
                }
            }
            return(result);
        }