Do not include collection expression conversion to nullable value type in ClassifyStandardImplicitConversion() #74251
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Do not include collection expression conversions to nullable value types in
ClassifyStandardImplicitConversion()
.User-defined conversions should not be considered in collection expression conversions. And it looks like the scenarios were not supported previously, even though
ClassifyStandardImplicitConversion()
allowed user-defined conversions from nullable value types, becauseBinder.ConvertCollectionExpression()
created aBoundCollectionExpression
withHasErrors=true
when the conversion was a user-defined conversion rather than a collection expression conversion.In some cases, such as the repro from #74185 with 17.8, a specific error was reported for the target type:
CS1061: 'Container<object>' does not contain a definition for 'Add'
In other cases, no diagnostic was reported from binding, but the invalid
BoundCollectionExpression
would cause emit to fail with a general error:CS7038: Failed to emit module: Unable to determine specific cause of the failure.
Now, the user-defined conversion is ignored in
ClassifyStandardImplicitConversion()
, and an error should be reported for the target type in all cases.Fixes #74185