首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >隐式铸造问题(整数文本)

隐式铸造问题(整数文本)
EN

Stack Overflow用户
提问于 2018-09-19 00:02:56
回答 1查看 130关注 0票数 1

我正在为更大的整数开发自定义Int/UInt类。它们在赋值/转换/算术等方面做得很好,但是它暴露了xunit和MSTest出现的一个问题。

这是我的密码:

代码语言:javascript
运行
复制
UInt240 x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);

问题是,如果我在右侧提供一个无符号类型,并在左侧提供一个文字,它将将该文字解释为"int“(或能够保存该值的相关有符号类型),并且无法转换为无符号类型(因为C#不隐式转换为无符号类型,xunit试图隐式转换为普通类型)。MSTest将允许它,将两者解释为"object“对象,但会出错,因为尽管值匹配,但类型不同。

同样的情况通常也发生在原语中:

代码语言:javascript
运行
复制
ulong x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);

我能做些什么来避免隐式转换(例如:“Assert.Equal((Ulong)0x7fffff,x);”)?它将使代码可怕地臃肿,必须在整个地方进行类型转换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-19 01:50:33

声明文字时,可以使用suffix声明类型。它允许您在没有强制转换的情况下指定文字类型。

所以不妨试试这个:

代码语言:javascript
运行
复制
UInt240 x = 0x7fffffffUL;
Assert.Equal(0x7fffffffUL, x);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52396124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档