Skip to content

Commit 235ae52

Browse files
committed
Always attempt standard implicit conversions before user-defined conversions.
1 parent d0fc041 commit 235ae52

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,22 @@ private Conversion ImplicitConversion(ResolveResult resolveResult, IType toType,
108108
return c;
109109
if (ImplicitConstantExpressionConversion(resolveResult, toType))
110110
return Conversion.ImplicitConstantExpressionConversion;
111+
}
112+
if (resolveResult is InterpolatedStringResolveResult)
113+
{
114+
if (toType.IsKnownType(KnownTypeCode.IFormattable) || toType.IsKnownType(KnownTypeCode.FormattableString))
115+
return Conversion.ImplicitInterpolatedStringConversion;
116+
}
117+
if (resolveResult.Type.Kind == TypeKind.Dynamic)
118+
return Conversion.ImplicitDynamicConversion;
119+
c = AnonymousFunctionConversion(resolveResult, toType);
120+
if (c != Conversion.None)
121+
return c;
122+
c = MethodGroupConversion(resolveResult, toType);
123+
if (c != Conversion.None)
124+
return c;
125+
if (resolveResult.IsCompileTimeConstant)
126+
{
111127
c = StandardImplicitConversion(resolveResult.Type, toType, allowTuple);
112128
if (c != Conversion.None)
113129
return c;
@@ -139,20 +155,7 @@ private Conversion ImplicitConversion(ResolveResult resolveResult, IType toType,
139155
{
140156
c = ImplicitConversion(resolveResult.Type, toType, allowUserDefined, allowTuple);
141157
}
142-
if (c != Conversion.None)
143-
return c;
144-
}
145-
if (resolveResult is InterpolatedStringResolveResult)
146-
{
147-
if (toType.IsKnownType(KnownTypeCode.IFormattable) || toType.IsKnownType(KnownTypeCode.FormattableString))
148-
return Conversion.ImplicitInterpolatedStringConversion;
149158
}
150-
if (resolveResult.Type.Kind == TypeKind.Dynamic)
151-
return Conversion.ImplicitDynamicConversion;
152-
c = AnonymousFunctionConversion(resolveResult, toType);
153-
if (c != Conversion.None)
154-
return c;
155-
c = MethodGroupConversion(resolveResult, toType);
156159
return c;
157160
}
158161

0 commit comments

Comments
 (0)