From 01d1e2ef57f908c9800323fe4bcceed1d4260871 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 12 Jul 2019 18:00:02 +0200 Subject: [PATCH] Fix #1569: Look for first non-static field in enum definitions to determine enum underlying type. --- ICSharpCode.Decompiler/SRMExtensions.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/ICSharpCode.Decompiler/SRMExtensions.cs b/ICSharpCode.Decompiler/SRMExtensions.cs index a59d37c7b..fc8fb2eb4 100644 --- a/ICSharpCode.Decompiler/SRMExtensions.cs +++ b/ICSharpCode.Decompiler/SRMExtensions.cs @@ -69,12 +69,17 @@ namespace ICSharpCode.Decompiler return false; if (!baseType.IsKnownType(reader, KnownTypeCode.Enum)) return false; - var field = reader.GetFieldDefinition(typeDefinition.GetFields().First()); - var blob = reader.GetBlobReader(field.Signature); - if (blob.ReadSignatureHeader().Kind != SignatureKind.Field) - return false; - underlyingType = (PrimitiveTypeCode)blob.ReadByte(); - return true; + foreach (var handle in typeDefinition.GetFields()) { + var field = reader.GetFieldDefinition(handle); + if ((field.Attributes & FieldAttributes.Static) != 0) + continue; + var blob = reader.GetBlobReader(field.Signature); + if (blob.ReadSignatureHeader().Kind != SignatureKind.Field) + return false; + underlyingType = (PrimitiveTypeCode)blob.ReadByte(); + return true; + } + return false; } public static bool IsDelegate(this TypeDefinitionHandle handle, MetadataReader reader)