C# 12 集合表达式编译错误

问题描述 投票:0回答:1

以下代码在 Windows 上本地编译,但在 Linux docker 容器中失败。两者都使用 .NET 8 SDK。 request.SearchText 属性是字符串类型?.

var searches = request.SearchText?.Split([',',' ',';','\n'], 
           StringSplitOptions.TrimEntries |
           StringSplitOptions.RemoveEmptyEntries).ToList() ?? [];

在 docker Linux 中收到此错误:

error CS0121: The call is ambiguous between the following methods or 
properties: 'string.Split(char[]?, StringSplitOptions)' and 
'string.Split(string?, StringSplitOptions)' [/src/....]

它似乎无法解析为相同的字符串。与 Windows 上一样,拆分重载。 显式声明数组的类型将修复编译错误:

        char[]? separator = [',',' ',';','\n'];
        var searches = request.SearchText?
            .Split(separator, StringSplitOptions.TrimEntries | 
             StringSplitOptions.RemoveEmptyEntries)
            .ToList() ?? [];

为什么编译器无法解析为linux上的同一个string.Split函数? 注意:这是一个大型项目的一部分,因此可能还有其他变量在起作用。

c# .net-8.0 c#-12.0
1个回答
0
投票

项目文件中的net8.0。 8.0.304 已本地安装。 docker 构建使用 8.0.201-jammy-sdk。

这是 SDK

8.0.200
版本中的错误。如果您将其安装在 Windows 计算机上并使用
global.json
固定版本并禁用前滚(在终端中使用
 dotnet --version
进行验证):

{
  "sdk": {
    "version": "8.0.200",
    "rollForward": "Disable"
  }
}

您将得到相同的错误(在我的机器上重现),但更新到更高版本的 SDK 将修复它(使用

8.0.304
8.0.401
检查)。所以需要将容器镜像更新到更高版本。

© www.soinside.com 2019 - 2024. All rights reserved.