From b85d1ba65af5d929eccd5f6695a9a9e23ce9f6ab Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 5 Oct 2022 21:13:43 +0200 Subject: [PATCH] Fix #2771: Allow MetadataTypeDefinition.DefaultMemberName to return null if DefaultMemberAttribute is not present. --- .../TypeSystem/Implementation/MetadataTypeDefinition.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs index 560683e55..8417e33b0 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs @@ -58,6 +58,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation IEvent[] events; IMethod[] methods; List directBaseTypes; + bool defaultMemberNameInitialized; string defaultMemberName; internal MetadataTypeDefinition(MetadataModule module, TypeDefinitionHandle handle) @@ -459,7 +460,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public string DefaultMemberName { get { string defaultMemberName = LazyInit.VolatileRead(ref this.defaultMemberName); - if (defaultMemberName != null) + if (defaultMemberName != null || defaultMemberNameInitialized) return defaultMemberName; var metadata = module.metadata; var typeDefinition = metadata.GetTypeDefinition(handle); @@ -475,7 +476,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation break; } } - return LazyInit.GetOrSet(ref this.defaultMemberName, defaultMemberName ?? "Item"); + defaultMemberName = LazyInit.GetOrSet(ref this.defaultMemberName, defaultMemberName); + defaultMemberNameInitialized = true; + return defaultMemberName; } } #endregion