I want to create an Enumeration using CodeDom API. I have searched enough on the internet and I get results which are hardly of any use.
What I want to generate is
public enum bug_tracker_type
{
    [Description("Bugzilla")]
    Bugzilla,
    [Description("Debbugs")]
    Debbugs,
    [Description("PHP Project Bugtracker")]
    PHP_Project_Bugtracker,
    [Description("Google Code")]
    Google_Code
}
I used CodeTypeDeclaration and set it's IsEnum property as true, created a name, and set it's Attributes.
Now the biggest problem is how to populate the body?
I tried
CodeTypeMember mem = new CodeTypeMember();
mem.Name = WadlSharpUtils.CreateIdentifier(discreteValue.value);
mem.CustomAttributes.Add(new CodeAttributeDeclaration(discreteValue.value));
// enumCandidate is an instance of CodeTypeDeclaration
enumCandidate.Members.Add(mem);
Though using this solution I can generate the Description attributes, the end of line would be ; and not ,
After all, enum is also a type! And often you would want to create one file for one enum definition. For doing so, you have to create a blank code file and add the namespace definition in it. After that, you have to insert the enum snippet in the file.
C# Does not allow use of methods in enumerators as it is not a class based principle, but rather an 2 dimensional array with a string and value.
In the C# language, enum (also called enumeration) is a user-defined value type used to represent a list of named integer constants. It is created using the enum keyword inside a class, structure, or namespace. It improves a program's readability, maintainability and reduces complexity.
An enumeration type (or enum type) is a value type defined by a set of named constants of the underlying integral numeric type. To define an enumeration type, use the enum keyword and specify the names of enum members: C# Copy.
Enum members are fields, so use CodeMemberField:
CodeTypeDeclaration type = new CodeTypeDeclaration("BugTracker");
type.IsEnum = true;
foreach (var valueName in new string[] { "Bugzilla", "Redmine" })
{
  // Creates the enum member
  CodeMemberField f = new CodeMemberField("BugTracker", valueName);
  // Adds the description attribute
  f.CustomAttributes.Add(new CodeAttributeDeclaration("Description", new CodeAttributeArgument(new CodePrimitiveExpression(valueName))));
  type.Members.Add(f);
}
(In this simplified code, the Description will always be the same as the member name. In your real code, of course, these can be different.)
A little quirk you may notice is that CodeDom adds a comma after the last enum value:
public enum BugTracker {
    [Description("Bugzilla")]
    Bugzilla,
    [Description("Redmine")]
    Redmine,                         // trailing comma
}
This is permitted by the C# language, precisely in order to support generated-code scenarios like this, and will compile fine even if it looks a bit odd to the human reader.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With