Skip to content

How can I set constant value to an enum field when creating a new enum  #922

@SwingCosmic

Description

@SwingCosmic

I can't set value to FieldDefinition.Constant and FieldDefinition.HasConstant because it depends on the constant value inside of the assembly module.

private TypeDefinition CloneEnum(TypeDefinition type,  ModuleDefinition target)
{
    var baseType = target.ImportReference(typeof(Enum));
    var newEnum = new TypeDefinition(type.Namespace, type.Name, type.Attributes, baseType);

    Console.WriteLine(type.Name);
    foreach (var f in type.Fields)
    {
        FieldDefinition field;
        if (!f.HasConstant) // value__
        {
            field = new FieldDefinition(f.Name, f.Attributes, target.TypeSystem.Int32);
        } else
        {
            field = new FieldDefinition(f.Name, f.Attributes, newEnum);
            // next two lines doesn't work
            field.HasConstant = true; //still false
            field.Constant = f.Constant; // still null
        }
        newEnum.Fields.Add(field);
    }
    return newEnum;
}

The result assembly contains the enums without any values.

image

And I'am really confused about this two properties:

image

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions