当前位置:  开发笔记 > 编程语言 > 正文

我应该使用int还是Int32

如何解决《我应该使用int还是Int32》经验,为你挑选了12个好方法。

在C#中,int并且Int32是同样的事情,但我读了许多那个时代int优于Int32没有给出理由.有原因,我应该关心吗?



1> 小智..:

这两者确实是同义词; int将会更加熟悉,Int32使32位读取代码更加明确.我倾向于使用int我只需要"整数"的地方,Int32其中大小很重要(加密代码,结构),所以未来的维护者会知道int在适当的情况下放大一个是安全的,但是应该注意Int32以同样的方式改变.

结果代码将是相同的:差异纯粹是可读性或代码外观之一.


阅读代码的人应该知道int是System.Int32的别名.在可读性方面,一致性更为重要.
对于那些拥有旧C++思维模式的人来说,IntPtr在32位操作系统上设计为32位,在64位操作系统上设计为64位.在摘要标记中特别提到了此行为.http://msdn.microsoft.com/en-us/library/system.intptr(VS.71).aspx

2> HasaniH..:

ECMA-334:2006 C#语言规范(第18页):

每种预定义类型都是系统提供的类型的简写.例如,关键字int引用结构System.Int32.作为一种风格问题,使用关键字比使用完整的系统类型名称更受青睐.



3> raven..:

它们都声明了32位整数,并且正如其他海报所述,你使用哪一个主要是语法风格.然而,它们并不总是以相同的方式行事.例如,C#编译器不允许这样:

public enum MyEnum : Int32
{
    member1 = 0
}

但它会允许这样:

public enum MyEnum : int
{
    member1 = 0
}

去搞清楚.


无法从Int32派生枚举是一种设计行为,通过查看.NET代码也可以看到:[Serializable,ComVisible(true)]公共抽象类枚举:ValueType,IComparable,IFormattable,请注意枚举是派生的来自ValueType?如果您尝试从内部数据类型(int,byte等)之外的其他内容派生枚举,您将收到如下错误:输入byte,sbyte,short,ushort,int,uint,long或ulong expected .
如果使用Reflector检查System.Int32类型,您会发现它是结构而不是类.代码如下所示:[Serializable,StructLayout(LayoutKind.Sequential),ComVisible(true)] public struct Int32:IComparable,IFormattable,IConvertible,IComparable ,IEquatable {public const int MaxValue = 0x7fffffff; ...您无法从结构中派生类型.至少你会收到一个告诉你的错误.然而,枚举行为有点不同,我将在下面评论.
@IllidanS4,新编译器Roslyn - 这是固定的,两种变体都有效
@daylight请注意,指定`enum`使用`int`不是`derive`,而是指定`底层类型`; 请参阅http://msdn.microsoft.com/en-us/library/sbbt4032.aspx#code-snippet-2
@JeroenWiertPluimers但是,为什么他们选择逐字检查基础类型并抛出[CS1008](http://msdn.microsoft.com/en-us/library/sab1z73a%28v=vs.90%29)仍然很有趣. aspx),因为底层类型只是枚举中常量的类型,所以在编译时它并不重要.

4> Remi Despres..:

我总是使用系统类型 - 例如,Int32而不是int.我在阅读了应用.NET Framework编程后采用了这种做法- 作者Jeffrey Richter为使用完整类型名称提供了一个很好的案例.以下是与我相关的两点:

    类型名称可能因.NET语言而异.例如,在C#中,Int32映射到System.Int64,而在C++中使用托管扩展,int映射到Int32.由于语言可以在使用.NET时进行混合和匹配,因此无论读者的首选语言如何,您都可以确保使用显式类名称将更加清晰.

    许多框架方法都将类型名称作为其方法名称的一部分:

    long

    long

    Int32



5> Brownie..:

int是一个C#关键字,是明确的.

大多数时候它没关系,但有两件事与Int32相反:

你需要一个"使用系统"; 声明.使用"int"不需要using语句.

可以定义自己的类Int32(这将是愚蠢和混乱).int总是表示int.



6> spoulson..:

如前所述,int= Int32.为了安全起见,请确保在实现任何关心数据类型边界的内容时始终使用int.MinValue/ int.MaxValue.假设.NET决定int现在Int64,你的代码将更少依赖于边界.


如果C#规范(它是一个C#,而不是.NET的决定)决定改为使用`int`64位,这将是*这样一个突破性的变化,我认为它不可能(或者当然是明智的)代码防御这种可能性.
@spoulson:第1行的注释错误:相等类型之间禁止分配.是的,一个糟糕的笑话.

7> HidekiAI..:

当你只需要处理一种语言时,类型的字节大小就不那么有趣了(对于那些你不必提醒自己有关数学溢出的代码).变得有趣的部分是当你在一种语言与另一种语言之间架起桥梁,C#与COM对象等等,或者你正在做一些变换或掩盖,你需要提醒自己(和你的代码审查共同工作者)的数据大小.

在实践中,我通常使用Int32来提醒自己它们的大小,因为我编写了托管C++(例如桥接到C#)以及非托管/本机C++.

只要您知道,C#是64位,但在本机C++中,它最终为32位,或者char为unicode/16位,而在C++中则为8位.但我们怎么知道呢?答案是,因为我们在手册中查了一遍,并且说了这么多.

有了时间和经验,当你编写代码以便在C#和其他语言之间架起桥梁时,你会开始变得更加认真(这里的一些读者会想"为什么会这样?"),但恕我直言,我相信这是一种更好的做法,因为我不记得上周我编写的内容(或者我不必在我的API文档中指定"此参数是32位整数").

在F#中(尽管我从未使用它),它们定义了int,int32nativeint.同样的问题应该出现,"我使用哪一个?".正如其他人所提到的,在大多数情况下,它应该无关紧要(应该是透明的).但我会选择int32和uint32来消除歧义.

我想这将取决于您正在编码的应用程序,使用者,您和您的团队遵循的编码实践等,以证明何时使用Int32.



8> Simon Steele..:

int和之间没有区别Int32,但是int语言关键词很多人都喜欢它风格(就像stringvs一样String).



9> Greg D..:

根据我的经验,这是一个常规的事情.我不知道在Int32上使用int的任何技术原因,但它是:

    键入更快.

    对典型的C#开发人员比较熟悉.

    默认visual studio语法高亮显示中的不同颜色.

我特别喜欢最后一个.:)



10> Mark A. Nico..:

在定义变量时我总是使用别名类型(int,string等),并在访问静态方法时使用实名:

int x, y;
...
String.Format ("{0}x{1}", x, y);

看到类似int.TryParse()的东西似乎很难看.除了风格之外别无他法.



11> Raithlin..:

我知道最好的做法是使用int,所有MSDN代码都使用int.但是,据我所知,没有超出标准化和一致性的理由.



12> 小智..:

虽然它们(大多数)是相同的(参见下面的[bug]差异),你绝对应该关心并且你应该使用Int32.

Int-16的整数名称为Int16.对于64位整数,它是Int64,对于32位整数,直观的选择是:int或Int32?

Int16,Int32或Int64类型的变量大小的问题是自引用的,但int类型变量大小的问题是一个完全有效的问题,无论多么微不足道,问题都会分散注意力,导致混淆,浪费时间,阻碍讨论等(这个问题存在的事实证明了这一点).

使用Int32可以促使开发人员意识到他们选择的类型.再一次int有多大?哦是的,32.当名称中包含大小时,实际考虑类型大小的可能性更大.使用Int32还可以提升对其他选择的了解.当人们不被迫至少认识到有替代品时,int变得太容易变成"整数型".

用于与32位整数交互的框架中的类名为Int32.再次,它是:更直观,减少混乱,缺乏一个(不必要的)翻译(而不是在系统中的翻译,但在开发商的头脑)等 int lMax = Int32.MaxValueInt32 lMax = Int32.MaxValue

int不是所有.NET语言中的关键字.

虽然有争议为什么它不可能永远不会改变,但int可能并不总是Int32.

缺点是要输入两个额外字符和[bug].

这不会编译

public enum MyEnum : Int32
{
    AEnum = 0
}

但这会:

public enum MyEnum : int
{
    AEnum = 0
}

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有