Мне нужно было сделать это с огромным списком, и дублирование списка показалось вам дорогостоящим, тем более что в моем случае количество удалений будет немного по сравнению с остальными. Я использовал этот низкоуровневый подход.
array = [lots of stuff]
arraySize = len(array)
i = 0
while i < arraySize:
if someTest(array[i]):
del array[i]
arraySize -= 1
else:
i += 1
Я не знаю, насколько эффективно несколько удалений сравниваются с копированием большого списка. Прокомментируйте, если у вас есть понимание.
Я думаю, вы забыли определение родового типа:
public T GetEnumValue<T>(int intValue) where T : struct, IConvertible // <T> added
, и вы можете улучшить его, чтобы он был наиболее удобным, например:
public static T ToEnum<T>(this string enumValue) : where T : struct, IConvertible
{
return (T)Enum.Parse(typeof(T), enumValue);
}
, после чего вы можете сделать:
TestEnum reqValue = "Value1".ToEnum<TestEnum>();
Существует множество способов сделать это, но если вы хотите простой пример, это будет сделано. Его просто необходимо улучшить с помощью необходимого защитного кодирования для проверки безопасности типа и недействительного разбора и т. Д.
/// <summary>
/// Extension method to return an enum value of type T for the given string.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static T ToEnum<T>(this string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
/// <summary>
/// Extension method to return an enum value of type T for the given int.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static T ToEnum<T>(this int value)
{
var name = Enum.GetName(typeof(T), value);
return name.ToEnum<T>();
}
Попробуйте что-то вроде этого
public static TestEnum GetMyEnum(this string title)
{
EnumBookType st;
Enum.TryParse(title, out st);
return st;
}
Итак, вы можете сделать
TestEnum en = "Value1".GetMyEnum();
Нет, вам не нужен общий метод. Это намного проще:
MyEnum enum = (MyEnum)myInt;
MyEnum enum = (MyEnum)Enum.Parse(typeof(TestEnum), myString);
Я думаю, что это также будет быстрее.
Из базы данных SQL get enum like:
SqlDataReader dr = selectCmd.ExecuteReader();
while (dr.Read()) {
EnumType et = (EnumType)Enum.Parse(typeof(EnumType), dr.GetString(0));
....
}
Может быть намного проще, если вы используете методы TryParse
или Parse
и ToObject
.
public static class EnumHelper
{
public static T GetEnumValue<T>(string str) where T : struct, IConvertible
{
Type enumType = typeof(T);
if (!enumType.IsEnum)
{
throw new Exception("T must be an Enumeration type.");
}
T val;
return Enum.TryParse<T>(str, true, out val) ? val : default(T);
}
public static T GetEnumValue<T>(int intValue) where T : struct, IConvertible
{
Type enumType = typeof(T);
if (!enumType.IsEnum)
{
throw new Exception("T must be an Enumeration type.");
}
return (T)Enum.ToObject(enumType, intValue);
}
}
Как отмечено в комментариях @chrfin, вы можете сделать это методом расширения очень легко просто добавив this
до типа параметра, который может быть удобен.
Ниже приведен метод в C # для получения значения перечисления по строке
///
/// Method to get enumeration value from string value.
///
///
///
public T GetEnumValue<T>(string str) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
throw new Exception("T must be an Enumeration type.");
}
T val = ((T[])Enum.GetValues(typeof(T)))[0];
if (!string.IsNullOrEmpty(str))
{
foreach (T enumValue in (T[])Enum.GetValues(typeof(T)))
{
if (enumValue.ToString().ToUpper().Equals(str.ToUpper()))
{
val = enumValue;
break;
}
}
}
return val;
}
. Ниже приведен метод в C # для получения значения enum значением int.
///
/// Method to get enumeration value from int value.
///
///
///
public T GetEnumValue<T>(int intValue) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
throw new Exception("T must be an Enumeration type.");
}
T val = ((T[])Enum.GetValues(typeof(T)))[0];
foreach (T enumValue in (T[])Enum.GetValues(typeof(T)))
{
if (Convert.ToInt32(enumValue).Equals(intValue))
{
val = enumValue;
break;
}
}
return val;
}
Если у меня есть перечисление следующим образом:
public enum TestEnum
{
Value1 = 1,
Value2 = 2,
Value3 = 3
}
, то я могу использовать вышеуказанные методы как
TestEnum reqValue = GetEnumValue<TestEnum>("Value1"); // Output: Value1
TestEnum reqValue2 = GetEnumValue<TestEnum>(2); // OutPut: Value2
Надеюсь, это поможет.
Попробуйте это
. Это другой способ
public enum CaseOriginCode
{
Web = 0,
Email = 1,
Telefoon = 2
}
public void setCaseOriginCode(string CaseOriginCode)
{
int caseOriginCode = (int)(CaseOriginCode)Enum.Parse(typeof(CaseOriginCode), CaseOriginCode);
}
Это комментарий для вашей статьи
blockquote>