【发布时间】:2020-07-21 17:37:01
【问题描述】:
我正在尝试构建一个 NpgsqlSimpleTypeHandler<ulong> 来处理将 ulong 值转换为 long 值,以便它们可以存储在我的 PostgreSQL 数据库中,反之亦然。
当我在使用Convert.ToInt64(value) 将ulong 转换为long 后尝试调用Npgsql 的Int64handler.ValidtaeAndGetLength 时,尝试传递新转换的long 会给我一个模棱两可的方法调用错误。
private readonly Int64Handler handler;
...
public override int ValidateAndGetLength(ulong value, NpgsqlParameter? parameter)
{
long val = Convert.ToInt64(value);
return handler.ValidateAndGetLength(val, parameter);
}
错误信息:
Error CS0121
The call is ambiguous between the following methods or properties:
'Int64Handler.ValidateAndGetLength(float, NpgsqlParameter?)' and
'Int64Handler.ValidateAndGetLength(decimal, NpgsqlParameter?)'
为什么,即使 Int64Handler.ValidateAndGetLength(long, NpgsqlParameter?) 存在,我最终会出现模棱两可的方法调用错误?
Npgsql Int64Handler documentation
[7/21/2020 14:23 EST] 更新标签以包含 C#-8.0
【问题讨论】:
-
你试过用float代替long吗?例如...
float val = Convert.ToInt64(value); -
使用浮点数可以正确编译,但是在我处理雪花(Discord ID)的长值时使用浮点数会产生不利影响吗?
-
在不相关的注释中,不鼓励编写自己的类型处理程序。尽管这些 API 是公开的,但它们更多地用于“官方”(阅读:维护)Npgsql 插件,并且可能随时中断(计划对 Npgsql 5.0 进行一些改进,可能会这样做)。请注意这一点。