在 .NET 9 中,params Span<T>
lang 功能中的中断性变更 会与隐式运算符 StringValues产生歧义。 此更改会导致编译器在遇到不明确的方法调用时引发错误 CS0121
。
以前的行为
受影响的 API 部分中提到的 API 以前没有与 StringValues的隐式运算符产生歧义的重载。 因此,编译器将解决重载,而不会出现任何问题。
新行为
当遇到这些不明确的重载时,编译器会引发错误 CS0121
,从而导致以下错误:
CS0121: The call is ambiguous between the following methods or properties: 'Program.Join(string, params string[])' and 'Program.Join(string, params ReadOnlySpan<string>)'
已引入的版本
.NET 9
中断性变更的类型
此更改是 源代码兼容性 更改。
更改原因
StringValues 具有 string
和 string[]
的隐式运算符,这些运算符会导致与 params Span<T>
lang 功能冲突。
建议的措施
通过将参数强制转换为适当的类型或应用命名参数,来明确指定要调用的方法。
受影响的 API
- System.String.Concat(ReadOnlySpan<String>)
- System.String.Join(Char, ReadOnlySpan<String>)
- System.String.Join(String, ReadOnlySpan<String>)
- System.IO.Path.Combine(ReadOnlySpan<String>)
- System.IO.Path.Join(ReadOnlySpan<String>)
- System.Text.StringBuilder.AppendJoin(String, ReadOnlySpan<String>)
- System.Text.StringBuilder.AppendJoin(Char, ReadOnlySpan<Object>)