Я генерирую динамические перечисления, которые представляют целочисленные идентификаторы из моей базы данных в решении C # ASP.NET.Я хотел бы две вещи, хотя ни одна из них не может быть возможной.
1) Я хочу, чтобы метод .ToString () дал мне, например, «345», а не строковое имя перечисления (int, которое оно представляет какстрока).Каждый ответ на этот вопрос, кажется, добавляет
[Description="Blah"]
EnumName = 1
над объявлением и использует метод GetDescription ().Я понятия не имею, как это сделать с динамическим кодом, который я использую.
2) Я бы не хотел приводить к int, чтобы использовать его как таковой, я бы предпочел (Enum.Name ==5) например.Если это невозможно, я приведу, но я действительно не хочу использовать ((int) Enum.Name)). ToString ();
Вот динамическая генерация кода:
public static void Main()
{
AppDomain domain = AppDomain.CurrentDomain;
AssemblyName aName = new AssemblyName("DynamicEnums");
AssemblyBuilder ab = domain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Save);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
List<Type> types = new List<Type>();
foreach(ReferenceType rt in GetTypes())
{
EnumBuilder eb = mb.DefineEnum(rt.Name, TypeAttributes.Public, typeof(int));
foreach (Reference r in GetReferences(rt.ID))
{
eb.DefineLiteral(NameFix(r.Name), r.ID);
}
types.Add(eb.CreateType());
}
ab.Save(aName.Name + ".dll");
foreach (Type t in types)
{
foreach (object o in Enum.GetValues(t))
{
Console.WriteLine("{0}.{1} = {2}", t, o, ((int) o));
}
Console.WriteLine();
//Console.ReadKey();
}
Console.WriteLine();
Console.WriteLine("Dynamic Enums Built Successfully.");
}
public static string NameFix(string name)
{
//Strip all non alphanumeric characters
string r = Regex.Replace(name, @"[^\w]", "");
//Enums cannot begin with a number
if (Regex.IsMatch(r, @"^\d"))
r = "N" + r;
return r;
}
Может быть, просто невозможно сделать то, что я хочу сделать, и я застряну, используя:
(int)Countries.USA //For int value
((int)Countries.CAN).ToString() //For string representation of int value, ex. "354"
Есть идеи?