EnumBuilder.UnderlyingSystemType != EnumBuilder.CreateType().UnderlyingSystemType
#110.924 aberto em 24 de dez. de 2024
Métricas do repositório
- Stars
- (17.886 stars)
- Métricas de merge de PR
- (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)
Description
Description
When creating an enumeration via the DefineEnum on the ModuleBuilder, the emitted type's UnderlyingSystemType is set to the type being emitted (creating a circular reference path). It should be set to the provided type.
Reproduction Steps
ModuleBuilder _moduleBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("Test"), AssemblyBuilderAccess.RunAndCollect).DefineDynamicModule("Test");
EnumBuilder builder = _moduleBuilder.DefineEnum("E_Test", TypeAttributes.Public, typeof(int));
builder.DefineLiteral("Low", 0); builder.DefineLiteral("High", 1);
Type type = builder.CreateType();
if (type.UnderlyingSystemType == type) { throw new Exception("Circular reference"); } else if (type.UnderlyingSystemType != builder.UnderlyingSystemType) { throw new Exception("This should never throw"); }
Expected behavior
Emitted type has the underlying type set to the type defined in the DefineEnum call ("Circular reference" exception will be thrown)
Actual behavior
Emitted type has the underlying type set to itself
Regression?
No response
Known Workarounds
No response
Configuration
.Net version: .Net 8.0.11 OS: Windows 11, latest updates applied Arch: x64
System.Reflection: 4.3.0
Other information
No response