Убедитесь, что вы не используете инкрементные целые числа для идентификаторов сеанса. Гораздо лучше использовать GUID или другую длинную случайную последовательность символов.
string str = "";
int value = 12;
if (Enum.IsDefined(typeof (DocumentTypes),value))
str = ((DocumentTypes) value).ToString();
else
str = "Invalid Value";
Это также будет обрабатывать недопустимые значения, пытающиеся использовать, без создания внутреннего исключения
Вы также можете заменить строку на DocumentTypes, т.е.
DocumentTypes dt = DocumentTypes.Invalid; // Create an invalid enum
if (Enum.IsDefined(typeof (DocumentTypes),value))
dt = (DocumentTypes) value;
И для бонусной точки, вот как добавить настраиваемую строку в перечисление (скопировано из этого ответа SO )
Enum DocumentType
{
[Description("My Document Type 1")]
Type1 = 1,
etc...
}
Затем добавьте где-нибудь метод расширения
public static string GetDescription<T>(this object enumerationValue) where T : struct
{
Type type = enumerationValue.GetType();
if (!type.IsEnum)
throw new ArgumentException("EnumerationValue must be of Enum type", "enumerationValue");
//Tries to find a DescriptionAttribute for a potential friendly name
//for the enum
MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
if (memberInfo != null && memberInfo.Length > 0)
{
object[] attrs = memberInfo[0].GetCustomAttributes(typeof (DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
{
//Pull out the description value
return ( (DescriptionAttribute) attrs[0] ).Description;
}
}
//If we have no description attribute, just return the ToString of the enum
return enumerationValue.ToString();
}
Затем вы можете использовать:
DocumentType dt = DocumentType.Type1;
string str = dt.GetDescription<DocumentType>();
Которая будет извлекать атрибут описания значение.
Это новая версия метода расширения, которому не нужно заранее знать тип Enum.
public static string GetDescription(this Enum value)
{
var type = value.GetType();
var memInfo = type.GetMember(value.ToString());
if (memInfo.Length > 0)
{
var attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs.Length > 0)
return ((DescriptionAttribute)attrs[0]).Description;
}
return value.ToString();
}
Вы можете напрямую преобразовать его:
int value = 12;
DocumentTypes dt = (DocumentTypes)value;
Попробуйте следующее:
public enum EnumTest { EnumOne, EnumTwo, EnumThree, Unknown }; public class EnumTestingClass{ [STAThread] static void Main() { EnumTest tstEnum = EnumTest.Unknown; object objTestEnum; objTestEnum = Enum.Parse(tstEnum.GetType(), "EnumThree"); if (objTestEnum is EnumTest) { EnumTest newTestEnum = (EnumTest)objTestEnum; Console.WriteLine("newTestEnum = {0}", newTestEnum.ToString()); } } }
Теперь из примера кода вы увидите, что newTestEnum
будет иметь значение из 'EnumTest' эквивалента строки «EnumThree».
Надеюсь, это поможет, С наилучшими пожеланиями, Том.
Прежде всего приведите к вашему типу перечисления и вызовите ToString ():
string str = ((DocumentTypes)12).ToString();