diff --git a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs index e96407395..e11a9e10d 100644 --- a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs @@ -3340,6 +3340,7 @@ namespace ICSharpCode.Decompiler.CSharp { var property = (IProperty)lastElement.Member; Debug.Assert(property.IsIndexer); + Debug.Assert(property.Setter != null, $"Indexer property {property} has no setter"); elementsStack.Peek().Add( new CallBuilder(this, typeSystem, settings) .BuildDictionaryInitializerExpression(lastElement.OpCode, property.Setter, initObjRR, GetIndices(lastElement.Indices, indexVariables).ToList(), info.Values.Single()) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/FakeMember.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/FakeMember.cs index 43549b6c6..2c4a2f67e 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/FakeMember.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/FakeMember.cs @@ -199,6 +199,16 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public bool IsIndexer { get; set; } public bool ReturnTypeIsRefReadOnly => false; public IReadOnlyList Parameters { get; set; } + + public override string ToString() => + "FakeProperty " + ReturnType + " " + DeclaringType.Name + "." + Name + + (Parameters.Count == 0 + ? "" + : "[" + string.Join(", ", Parameters) + "]") + + " { " + + (CanGet ? "get; " : "") + + (CanSet ? "set; " : "") + + "}"; } sealed class FakeEvent : FakeMember, IEvent