Should I use int or Int32
在C#中,
两者确实是同义词。 结果代码将是相同的:区别仅仅是可读性或代码外观之一。 ECMA-334:2006 C#语言规范(p18):
它们都声明了32位整数,并且正如其他张贴者所指出的那样,您使用的大部分都是语法风格的问题。但是,它们的行为并不总是相同的。例如,C#编译器不允许这样做:
但这将允许:
去搞清楚。 我总是使用系统类型-例如Int32而不是int。在阅读Applied .NET Framework编程后,我采用了这种做法-作者Jeffrey Richter为使用完整类型名称提供了一个很好的案例。这是我的两点:
类型名称在.NET语言之间可能有所不同。例如,在C#中, 许多框架方法将类型名称作为其方法名称的一部分:
int是C#关键字,没有歧义。 在大多数情况下,这并不重要,但是有两点与Int32背道而驰:
如前所述, 当您只需要使用一种语言(对于不需要提醒自己有关数学溢出的代码)时,类型的字节大小就不太有趣了。变得有趣的部分是当您在一种语言与另一种语言之间,从C#到COM对象等之间进行桥接时,或者您正在进行一些移位或屏蔽时,您需要提醒自己(和代码审查合作伙伴)数据大小。 实际上,我通常使用Int32来提醒自己它们的大小,因为我确实写了托管C ++(例如,桥接到C#)以及非托管/本机C ++。 您可能知道,在C#中为64位,但是在本机C ++中,它最终为32位,或者char为unicode / 16位,而在C ++中为8位。但是我们怎么知道呢?答案是,因为我们已经在手册中查找了它,所以它是这样。 凭借时间和经验,当您编写代码在C#和其他语言之间架桥时,您将开始更加认真地对待类型(这里有些读者在想"为什么?"),但是恕我直言,我认为这是一种更好的做法,因为我不记得上周编写的代码(或者我不必在API文档中指定"此参数是32位整数")。 在F#中(尽管我从未使用过),它们定义了int,int32和nativeint。将会出现相同的问题,"我使用哪个?"。正如其他人所提到的,在大多数情况下,这无关紧要(应该透明)。但是我会选择int32和uint32只是为了消除歧义。 我猜这将取决于您正在编码的应用程序,正在使用的应用程序,您和您的团队遵循的编码实践等等,以证明何时使用Int32是合理的。
以我的经验,这是很常规的事情。我不知道在Int32上使用int的任何技术原因,但这是: 我特别喜欢最后一个。 :) 在定义变量时,我总是使用别名类型(int,字符串等),在访问静态方法时,我总是使用真实名称:
看到类似int.TryParse()的东西看起来很丑。除了样式,我没有其他原因。 尽管它们(大部分)是相同的(请参见下面的[bug]区别),但您绝对应该注意并应该使用Int32。
缺点是要键入两个额外的字符和[bug]。 这不会编译
但这将:
我知道最佳实践是使用int,并且所有MSDN代码都使用int。但是,据我所知,除了标准化和一致性之外,没有其他理由。
你不在乎大多数情况下,您应该使用 从前,int数据类型与编译器目标机器的寄存器大小挂钩。因此,例如,用于16位系统的编译器将使用16位整数。 但是,幸运的是,我们再也看不到16位了,而当64位开始流行时,人们开始更加关注使其与旧软件兼容,而32位已经存在了很长时间,因此对于大多数编译器来说,仅假定为32位。 我建议使用Microsoft的StyleCop。 就像FxCop,但用于样式相关的问题。默认配置与Microsoft的内部样式指南相匹配,但是可以为您的项目自定义。 可能需要一点时间来习惯,但绝对可以使您的代码更好。 您可以将其包括在构建过程中以自动检查违规情况。 int是System.Int32的C#语言快捷方式 尽管这确实意味着Microsoft可以更改此映射,但有关FogCreek讨论的帖子指出[来源] "在64位问题上–微软确实正在开发64位版本的.NET Framework,但我很确定int不会映射到该系统上的64位。 原因: 1. C#ECMA标准专门指出int是32位,而long是64位。 2. Microsoft在Framework版本1.1中引入了其他属性和方法,这些属性和方法返回长值而不是int值,例如Array.GetLongLength和Array.GetLength。 因此,我可以肯定地说所有内置C#类型都将保留其当前映射。" int与System.Int32相同,并且在编译时它将在CIL中变成相同的东西。 我们在C#中按惯例使用int,因为C#想要看起来像C和C ++(和Java),这就是我们在这里使用的... 顺便说一句,在声明各种Windows API函数的导入时,我确实使用了System.Int32。我不确定这是否是已定义的约定,但它提醒我要使用外部DLL ... 在实践中没有什么区别,随着时间的流逝,您将采用自己的约定。我倾向于在分配类型时使用关键字,而在使用静态方法时使用类版本: int total = Int32.Parse(" 1009");
你不在乎如果要考虑大小,我将使用byte,short,int和long。使用大于int32的int的唯一原因是,如果您需要一个大于2147483647或小于-2147483648的数字。 除了我不在乎之外,还有很多其他需要关注的项目。 如果Microsoft将整数的默认实现更改为某些新的带版本版本(我们将其称为Int32b),则使用int。 然后,Microsoft可以将int别名更改为Int32b,并且我不必更改任何代码即可利用其新的(并有望得到改进)整数实现。 任何类型的关键字也是如此。
您无需关心大多数编程语言,除非您需要编写非常具体的数学函数或针对一种特定体系结构进行了优化的代码...只需确保类型的大小足以满足您的需要(如果您使用的是大于Int的值,知道您将需要超过32位) 某些编译器在不同平台上具有不同的int大小(不是特定于C#) 某些编码标准(MISRA C)要求使用的所有类型均指定大小(即Int32而不是int)。 为不同类型的变量指定前缀也很好(例如b表示8位字节,w表示16位字,l表示32位长字=> Int32 lMyVariable) 您应该注意,因为它使您的代码更具可移植性和可维护性。 如果您将始终使用C#,并且Portable C#规范在这方面不会改变,则Portable可能不适用于C#。 可维护的ihmo将始终适用,因为维护您的代码的人员可能不了解此特定C#规范,并且在int偶尔超过2147483647的情况下错过了一个错误。 在一个简单的for循环中,例如一年中的几个月,您将不在乎,但是当您在变量可能会顺流的情况下使用变量时,您应该在意。 您还应该注意是否要对其进行按位操作。 根据Visual Studio 2012中的即时窗口,Int32为int,Int64为long。这是输出:
使用 还要考虑Int16。如果您需要在应用程序的内存中存储一??个Integer并且担心使用的内存量,则可以使用Int16,因为它使用的内存较少,并且最小/最大范围比Int32小(这就是int 。) 不久前,当我们拜访Microsoft .NET CLR产品团队中的某人时,我正在与Microsoft合作开展一个项目。这个人编写了示例代码,当他定义变量时,他使用了" Int32"和" int"以及" String"和" string"。 我还记得在Microsoft的其他示例代码中看到过这种样式。因此,我进行了一些研究,发现每个人都说" Int32"和" int"之间没有区别,除了语法着色。实际上,我发现很多材料建议您使用" Int32"使代码更具可读性。因此,我采用了这种风格。 前几天,我确实发现了差异!编译器不允许您使用" Int32"键入枚举,但是当您使用" int"时允许。不要问我为什么,因为我还不知道。 例:
这可行。
摘自:Int32表示法与int 使用Int或Int32都是一样的Int只是糖,可以简化读者的代码。 使用Nullable变体Int吗?还是Int32?当您在包含null的字段上使用数据库时。这样可以避免许多运行时问题。 没关系int是语言关键字,而Int32是其实际系统类型。 另请参阅我对相关问题的回答。 int可以容纳的字节数取决于编译的目的,因此,当您为32位处理器编译程序时,它可以容纳2 ^ 32/2到-2 ^ 32/2 + 1的数字,而对于64位则可以保持从2 ^ 64/2到-2 ^ 64/2 + 1。 int32将始终保存2 ^ 32个值。 编辑:忽略我的答案,我没有看到C#。我的答案是针对C和C ++的。我从没用过C# |