From 235ae527560a009f90cd46817ba0b7b55fb00499 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 1 Aug 2025 11:03:03 +0200 Subject: [PATCH] Always attempt standard implicit conversions before user-defined conversions. --- .../CSharp/Resolver/CSharpConversions.cs | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs index bc857c9f1..ffed882bb 100644 --- a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs +++ b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs @@ -108,6 +108,22 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver return c; if (ImplicitConstantExpressionConversion(resolveResult, toType)) return Conversion.ImplicitConstantExpressionConversion; + } + if (resolveResult is InterpolatedStringResolveResult) + { + if (toType.IsKnownType(KnownTypeCode.IFormattable) || toType.IsKnownType(KnownTypeCode.FormattableString)) + return Conversion.ImplicitInterpolatedStringConversion; + } + if (resolveResult.Type.Kind == TypeKind.Dynamic) + return Conversion.ImplicitDynamicConversion; + c = AnonymousFunctionConversion(resolveResult, toType); + if (c != Conversion.None) + return c; + c = MethodGroupConversion(resolveResult, toType); + if (c != Conversion.None) + return c; + if (resolveResult.IsCompileTimeConstant) + { c = StandardImplicitConversion(resolveResult.Type, toType, allowTuple); if (c != Conversion.None) return c; @@ -139,20 +155,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver { c = ImplicitConversion(resolveResult.Type, toType, allowUserDefined, allowTuple); } - if (c != Conversion.None) - return c; - } - if (resolveResult is InterpolatedStringResolveResult) - { - if (toType.IsKnownType(KnownTypeCode.IFormattable) || toType.IsKnownType(KnownTypeCode.FormattableString)) - return Conversion.ImplicitInterpolatedStringConversion; } - if (resolveResult.Type.Kind == TypeKind.Dynamic) - return Conversion.ImplicitDynamicConversion; - c = AnonymousFunctionConversion(resolveResult, toType); - if (c != Conversion.None) - return c; - c = MethodGroupConversion(resolveResult, toType); return c; }