【发布时间】:2011-03-16 15:46:48
【问题描述】:
在开始使用 C# 之前,我的背景主要是 C/C++。我在 C# 中的第一个项目中所做的其中一件事就是创建一个这样的类
class Element{
public uint Size;
public ulong BigThing;
}
然后我被这需要强制转换的事实感到羞愧:
int x=MyElement.Size;
也一样
int x=5;
uint total=MyElement.Size+x;
为什么语言设计者决定让有符号和无符号整数类型不能隐式转换?为什么在 .Net 库中没有更多地使用无符号类型?例如String.Length 永远不会是负数,但它是一个有符号整数。
【问题讨论】:
-
即使在 C++ 中,从 unsigned 到 signed 或 back 的强制转换也会导致警告。
-
@Seva 取决于编译器:P.. 我意识到我的第一个案例是一个弱案例,但我的第二个案例确实更符合我的意思,因为除非
x,否则那里没有数据丢失的机会是负数 -
第二次计算,请参阅下面的回复...
-
你删除了另一个问题?无论如何返回false;这是解决方案:)我检查它。
-
@Aristo 是的,很明显,我认为这并不重要,所以我删除了它。我不到 10k,所以现在我什至看不到我删除的问题取消删除它。
标签: c# .net casting language-design unsigned