Short 上的一元减号变成了 int?

2023-11-26

在下面的:

public class p
{
  short? mID;
  short? dID;
}

short id = p.mID ?? -p.dID.Value;

编译器给我错误:

错误 21 无法将类型“int”隐式转换为“short”。存在显式转换(您是否缺少强制转换?)

我必须将代码更改为以下内容才能使其正常工作:

short id = p.mID ?? (short)-p.dID.Value;

就好像编译器正在执行 (int)0 - p.dID.Value 之类的操作,或者 Int16.operator - 返回 Int32s...?


我建议您参阅规范的第 7.6.2 节,其中规定:


对于 –x 形式的操作,应用一元运算符重载决策来选择特定的运算符实现。操作数转换为所选运算符的参数类型,结果类型为该运算符的返回类型。预定义的否定运算符是:

整数求反:

int operator –(int x);
long operator –(long x);

结果是通过从零减去 x 来计算的。如果 x 的值是操作数类型的最小可表示值(对于 int 为 -2^31,对于 long 为 -2^63),则 x 的数学负数在操作数类型中不可表示。如果这种情况发生在已检查的上下文中,则会抛出 System.OverflowException;如果它发生在未经检查的上下文中,则结果是操作数的值并且不会报告溢出。 如果求反运算符的操作数为uint类型,则将其转换为long类型,并且结果类型为long。一个例外是允许将 int 值 −2147483648 (−2^31) 写为十进制整数文字的规则。

如果求反运算符的操作数是 ulong 类型,则会发生编译时错误。一个例外是允许将长值 −9223372036854775808 (−2^63) 写为十进制整数文字的规则。

浮点求反:

float operator –(float x);
double operator –(double x);

结果是 x 的值,其符号反转。如果 x 为 NaN,则结果也为 NaN。

小数求反:

decimal operator –(decimal x);

结果是通过从零减去 x 来计算的。十进制求反相当于使用 System.Decimal 类型的一元减运算符。


正如您所看到的,shorts 上没有定义一元减运算符;重载解析选择整数上的一个,因为它是所有可用一元减运算符的最佳匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Short 上的一元减号变成了 int? 的相关文章

随机推荐

  • 当 SQL 数据库添加新行而不进行轮询时,C# Azure 函数触发

    有没有一种方法可以在每次将新数据库行添加到 SQL azure 数据库时调用 Azure 函数 理想情况下没有任何基于计时器的轮询 我知道这可以在 blob 存储上完成 但没有找到在 Azure 函数上执行此操作的方法 提前致谢 Funct
  • 未命名命名空间访问规则

    我正在查看部分7 3 1 1在 C 03 标准中 期望找到未命名命名空间中定义的项的访问规则的一些描述 对于未命名的命名空间 规则似乎有点不同 因为您无法完全限定对其中的项目的访问权限 我知道至少在同一个翻译单元中 人们可以访问未命名名称空
  • 无法在带有 glassfish 服务器的 ubuntu 上使用 intelliJ 在调试模式下运行 Web 应用程序

    在 ubuntu 12 04 上的 intelliJ 12 0 和 glassfish 3 1 2 2 中 我尝试在调试模式下启动我的 Web 应用程序 但收到以下错误消息 Error starting domain domain1 The
  • 在 Ruby/Rails 中读取远程 MP3 文件的 ID3 标签?

    使用 Ruby 如何解析远程 mp3 文件的 ID3 标签而不将整个文件下载到磁盘 这个问题已经被问到Java and 银光 但没有红宝石 Edit 查看 Java 答案 似乎可以 HTTP 支持 仅下载文件的尾部 即标签所在的位置 这可以
  • Apache Camel MDC 从 Body 添加字段

    我正在使用 apache Camel 并希望使用 MDC 将某些键添加到我的日志中 我通过官方Camel MDC 日志记录文档这非常棒 我可以毫不费力地记录我的routeId 我还需要添加来自骆驼身体的字段 最坏的情况是我可以在所有路由中手
  • @ViewScoped 托管 bean 在回发期间加载多次

    我在 jsf Facelet 上有一个日历 编辑器 文件上传和 dataTable primefaces 控件 代码如下
  • Android中如何获取文件的绝对路径?

    btnimport setOnClickListener new View OnClickListener Override public void onClick View v Intent fileintent new Intent I
  • 如何在android中的每个标记(多个标记)上打开信息窗口?

    由于我使用的是 Google 地图 v2 并且我想打开多个制造商的信息窗口 我已经使用单个标记完成了此操作 并且还使用了 show info window 但它适用于最后一个标记并且仅适用于一个 我只想要安卓 public class Ma
  • SocketIOException:客户端中出现意外的握手错误

    以下异常 SocketIOException Unexpected handshake error in client OS Error errno 12268 0 SecureFilterImpl handshake dart io pa
  • OData V4 + WebAPI 按枚举的 Int 值过滤?

    OData V4 有枚举支持 但似乎您必须仅按命名空间进行搜索 现在如何通过值而不是文本表示进行搜索 在 odata V3 中 您可以查询 filter Status eq 35 where 35 is Complete在枚举中 即使该字段
  • PostgreSQL 中的混合隔离级别

    如果任何其他会话使用例如可串行化事务 这是否重要 自动提交还是 READ COMMITED 隔离级别 换句话说 当从多个进程 线程 或其他需要注意的事项 访问数据库时 混合隔离级别 和自动提交 是否存在任何危险 请注意 我知道 普通 问题
  • 在 Node.js 上通过 XMPP 连接到 Google Talk

    我尝试过对 Node js 使用各种 XMPP 库 但在连接到 Google Talk 的 XMPP 服务器时遇到问题 我想联系并查看朋友的状态 但我什至无法出门 我有一个通过 Google Apps for Domains 托管的个人域
  • 如何在已 root 的设备上使用文件资源管理器?

    Eclipse 已连接到我已 root 的手机 我可以运行调试会话并查看 LogCat 消息 我还可以看到电话Devices查看在DDMS观点 但是 当我打开File Explorer视图 以相同的视角 我明白了nothing 我可以发誓我
  • 使用 ruby​​ mechanize 捕获超时错误

    我有一个机械化功能可以让我退出网站 但在极少数情况下我会超时 该功能涉及转到特定页面 然后单击注销按钮 有时 当进入注销页面或单击注销按钮时 机械化会遇到超时 代码会崩溃 所以我做了一个小小的救援 它似乎正在工作 如第一段代码所示 def
  • 为什么我的查询不可更新?

    我正在尝试在 Access 中为用户构建可更新的视图 基本上 基础表如下所示 Accounts accountId accountName accountHolder TransactionStatements statementId ac
  • Thread.Sleep(0) 不按描述工作?

    我目前正在阅读这篇优秀的文章关于线程并阅读以下文本 Thread Sleep 0 立即放弃线程当前的时间片 自愿将CPU交给其他线程 我想测试一下 下面是我的测试代码 static string s static void Main str
  • SQL:如何将 Oracle 表中的 100,000 条记录拆分为 5 个块?

    我试图找出将具有 100 万条以上记录的表中的前 100 000 条记录拆分为 5 五 20 000 条记录块以放入文件中的方法 也许某些 SQL 会获取 20 000 条记录的每 5 个块的最小和最大 rowid 或主 id 因此我可以将
  • 自动生成的默认连接字符串与手动添加的连接字符串

    假设我有一个简单的 WPF 应用程序 使用 Entity Framework Code First 创建数据库 连接到它并显示一些数据 从一开始我就不想担心连接字符串 因此在通过 Nuget 添加实体框架引用后 我将获得自动生成的 app
  • .net core 2 API 中是否真正需要 services.AddSingleton

    我只需添加以下内容即可在 NET Core 2 Web API 控制器中访问 appsettings json public class MyController Controller private readonly IConfigura
  • Short 上的一元减号变成了 int?

    在下面的 public class p short mID short dID short id p mID p dID Value 编译器给我错误 错误 21 无法将类型 int 隐式转换为 short 存在显式转换 您是否缺少强制转换