123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- namespace Wayne.Lib
- {
- /// <summary>
- /// Enumsupport is a class that has the goal to provide the functionality offered by System.Enum class, but that
- /// are not available in compact framework. It is very limited in some aspects, so please read carefully the comments of each method.
- /// </summary>
- public static class EnumSupport
- {
- /// <summary>
- /// Gets a list of the enumerated value names for the specified enumeration type.
- /// NOTE: The enum must not have explicit values set, so there are gaps in the value range, it must start at 0 and go up to max.
- /// </summary>
- /// <typeparam name="TEnumType"></typeparam>
- /// <returns></returns>
- public static string[] GetNames<TEnumType>()
- {
- Type type = typeof(TEnumType);
- if (!type.IsEnum)
- throw new ArgumentException("Type must be an enumeration.");
- List<string> names = new List<string>();
- int i = 0;
- while (System.Enum.IsDefined(type, i))
- {
- object oInt = i;
- TEnumType enumVal = (TEnumType)oInt;
- object oEnum = enumVal;
- names.Add((oEnum).ToString());
- i++;
- }
- return names.ToArray();
- }
- /// <summary>
- /// Gets a list of the enumerated values for the specified enumeration type.
- /// NOTE: The enum must not have explicit values set, so there are gaps in the value range, it must start at 0 and go up to max.
- /// </summary>
- /// <typeparam name="TEnumType"></typeparam>
- /// <returns></returns>
- public static TEnumType[] GetValues<TEnumType>()
- {
- Type type = typeof(TEnumType);
- if (!type.IsEnum)
- throw new ArgumentException("Type must be an enumeration.");
- List<TEnumType> values = new List<TEnumType>();
- int i = 0;
- while (System.Enum.IsDefined(type, i))
- {
- object o = i;
- TEnumType et = (TEnumType)o;
- values.Add(et);
- i++;
- }
- return values.ToArray();
- }
- /// <summary>
- /// Parse a string to an enumeration value given a defaul value if failed.
- /// </summary>
- /// <typeparam name="TEnumType">The enumeration type.</typeparam>
- /// <param name="value">A string containing the name or value to convert.</param>
- /// <param name="ignoreCase">If true, ignore case; otherwise, regard case.</param>
- /// <param name="defaultValue">The default value of the enumeration if the parsing fails.</param>
- /// <returns></returns>
- [DebuggerStepThrough]
- public static TEnumType Parse<TEnumType>(string value, bool ignoreCase, TEnumType defaultValue)
- {
- try
- {
- return (TEnumType)Enum.Parse(typeof(TEnumType), value, ignoreCase);
- }
- catch (ArgumentException)
- {
- return defaultValue;
- }
- }
- /// <summary>
- /// Parse a string to a nullable enumeration value. If it's impossible to parse the string to this
- /// enumeration type, null is returned.
- /// </summary>
- /// <typeparam name="TEnumType">The enumeration type.</typeparam>
- /// <param name="value">A string containing the name or value to convert.</param>
- /// <param name="ignoreCase">If true, ignore case; otherwise, regard case.</param>
- /// <returns></returns>
- /// <exception cref="ArgumentException">If TEnumType is not an enum.</exception>
- [DebuggerStepThrough]
- public static TEnumType? ParseDefaultNull<TEnumType>(string value, bool ignoreCase) where TEnumType : struct
- {
- if (!typeof(TEnumType).IsEnum)
- throw new ArgumentException("Type T Must be an Enum");
- if (string.IsNullOrEmpty(value))
- return null;
- try
- {
- return (TEnumType)Enum.Parse(typeof(TEnumType), value.Replace(typeof(TEnumType).Name + ".",""), ignoreCase);
- }
- catch (ArgumentException)
- {
- return null;
- }
- }
-
- }
- }
|