Browse Source

Always attempt standard implicit conversions before user-defined conversions.

pull/3529/head
Daniel Grunwald 5 months ago
parent
commit
235ae52756
  1. 29
      ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs

29
ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs

@ -108,6 +108,22 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver @@ -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 @@ -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;
}

Loading…
Cancel
Save