diff --git a/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs b/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs index 2d832dfd74..6ddc23b437 100644 --- a/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs @@ -53,8 +53,8 @@ public RecordDecompiler(IDecompilerTypeSystem dts, ITypeDefinition recordTypeDef this.settings = settings; this.cancellationToken = cancellationToken; this.baseClass = recordTypeDef.DirectBaseTypes.FirstOrDefault(b => b.Kind == TypeKind.Class); - this.isStruct = baseClass.IsKnownType(KnownTypeCode.ValueType); - this.isInheritedRecord = !isStruct && !baseClass.IsKnownType(KnownTypeCode.Object); + this.isStruct = baseClass?.IsKnownType(KnownTypeCode.ValueType) ?? false; + this.isInheritedRecord = !isStruct && !(baseClass?.IsKnownType(KnownTypeCode.Object) ?? false); this.isSealed = recordTypeDef.IsSealed; DetectAutomaticProperties(); this.orderedMembers = DetectMemberOrder(recordTypeDef, backingFieldToAutoProperty); @@ -292,7 +292,7 @@ public bool MethodIsGenerated(IMethod method) // virtual bool Equals(R? other): generated unless user-declared return IsGeneratedEquals(method); } - else if (isInheritedRecord && NormalizeTypeVisitor.TypeErasure.EquivalentTypes(paramType, baseClass) && method.IsOverride) + else if (isInheritedRecord && baseClass != null && NormalizeTypeVisitor.TypeErasure.EquivalentTypes(paramType, baseClass) && method.IsOverride) { // override bool Equals(BaseClass? obj): always generated return true; @@ -772,7 +772,7 @@ private bool IsGeneratedEquals(IMethod method) return false; if (!(conditions[pos] is Call { Method: { Name: "Equals" } } call)) return false; - if (!NormalizeTypeVisitor.TypeErasure.EquivalentTypes(call.Method.DeclaringType, baseClass)) + if (baseClass != null && !NormalizeTypeVisitor.TypeErasure.EquivalentTypes(call.Method.DeclaringType, baseClass)) return false; if (call.Arguments.Count != 2) return false;