首页 新闻 会员 周边 捐助

升级到 .NET 10 后 Guid.Parse 报错

0
悬赏园豆:30 [已解决问题] 解决于 2025-11-13 13:13

项目从 .NET 9 升级到 .NET 10 后,下面的代码编译是报错

var items = await ListRankAsync(CacheKeyManager.UserVisitRank(appName, DateTime.Now), skip, take, pattern);
return items.Select(x => new UserVisitCountItem(Guid.Parse(x.Element), (long)x.Score)).ToList();

错误信息如下

The call is ambiguous between the following methods or properties: 'Guid.Parse(ReadOnlySpan<byte>)' and 'Guid.Parse(string)'

x.Element 的类型是 RedisValue

dudu的主页 dudu | 高人七级 | 园豆:24466
提问于:2025-11-13 08:15
< >
分享
最佳答案
0

在 .NET 9 及之前,Guid.Parse 只有 string 等少数重载。
.NET 10(预览版或未来版本)引入了 Guid.Parse(ReadOnlySpan<byte>) 以支持更高效的二进制解析。
RedisValue 定义了多个隐式转换运算符:
public static implicit operator string(RedisValue value);
public static implicit operator ReadOnlySpan<byte>(RedisValue value);

收获园豆:30
我的名字长沙雕跟着念 | 小虾三级 |园豆:550 | 2025-11-13 11:14

就是这个原因,强制转换为 ReadOnlySpan<byte> 就可以了,用下面的代码验证通过

using StackExchange.Redis;

var userId = Guid.NewGuid();
var redisValue = new RedisValue(userId.ToString());
var guid = Guid.Parse((ReadOnlySpan<byte>)redisValue);
Console.WriteLine(guid);
dudu | 园豆:24466 (高人七级) | 2025-11-13 13:11
其他回答(1)
0

类型推断不出来. 加一个 (bytes[] || string )x.Element. redisvalue 能 implicit 转换到 string 或者bytep[]. Guid.Parse 不知道选哪一个.

czd890 | 园豆:14652 (专家六级) | 2025-11-13 10:10

C# 不支持这个语法吧 (bytes[] || string )

支持(0) 反对(0) dudu | 园豆:24466 (高人七级) | 2025-11-13 13:13

@dudu: 二选一的意思

支持(0) 反对(0) czd890 | 园豆:14652 (专家六级) | 2025-11-13 14:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册