int和System的区别是什么?Int16、系统。Int32和System。Int64,而不是它们的大小?


当前回答

他们确实是同义的,但是我发现他们之间的小区别,

1)创建enum时不能使用Int32

enum Test : Int32
{ XXX = 1   // gives you compilation error
}

enum Test : int
{ XXX = 1   // Works fine
}

2) Int32属于System声明。如果你不使用。在系统中,你会得到编译错误,但在int中不会

其他回答

没什么。两种类型之间的唯一区别是它们的大小(以及它们可以表示的值的范围)。

根据Jeffrey Richter(.NET框架开发的贡献者之一)的书《CLR via c#》:

int是c#编译器允许的基本类型,而Int32是框架类库类型(适用于所有遵守CLS的语言)。事实上,int在编译时转换为Int32。

同时,

在c#中,长映射到系统。Int64,但是在不同的编程中 语言,long可以映射到Int16或Int32。事实上,c++ /CLI做到了 将long处理为Int32。 事实上,大多数(.NET)语言甚至不会将long视为关键字,也不会 编译使用它的代码。

我曾见过这位作者,以及许多关于. net的标准文献更喜欢FCL类型(例如。, Int32)到特定于语言的原语类型(即:, int),主要关注互操作性问题。

唯一真正的区别是大小。这里所有的int类型都是带符号的整型值,大小不同

Int16: 2字节 Int32和int: 4字节 Int64: 8字节

Int64和其他的有一个小的区别。在32位平台上,分配给Int64存储位置不保证是原子的。对于所有其他类型都是保证的。

int

它是c#中定义的基本数据类型。

它被映射到FCL类型的Int32。

它是一个值类型,表示System。Int32结构。

它是有符号的,长度为32位。

它具有最小值-2147483648和最大值+2147483647。

Int16

这是整柜型。

在c#中,short被映射为Int16。

它是一个值类型,表示System。Int16结构。

它带符号,长度为16位。

最小值为-32768,最大值为+32767。

Int32

这是整柜型。

在c#中,int被映射到Int32。

它是一个值类型,表示System。Int32结构。

它是有符号的,长度为32位。

它具有最小值-2147483648和最大值+2147483647。

Int64

这是整柜型。

在c#中,long被映射到Int64。

它是一个值类型,表示System。Int64结构。

它是有符号的,长度为64位。

它的最小值为-9,223,372,036,854,775,808,最大值为9,223,372,036,854,775,807。

关于16、32和64类型有一个非常重要的注意事项:

如果你运行这个查询… 数组中。IndexOf(new Int16[]{1,2,3}, 1)

你应该得到0(0),因为你问…是1在1 2或3的数组中。 如果你得到的答案是-1,这意味着1不在1,2,3的数组中。

来看看我的发现: 下面所有的结果都应该是0而不是-1 (我已经在所有的框架版本2.0,3.0,3.5,4.0中进行了测试)

C#:

Array.IndexOf(new Int16[]{1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32[]{1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64[]{1,2,3}, 1) = 0 (correct)

VB。NET:

Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct)

我的观点是,对于数组。IndexOf比较,只信任Int32!