什么时候使用int与Int32,或字符串与String?

时间:2012-01-05 17:49:40

标签: c# types

在C#中,built-in types的关键字只是System命名空间中相应类型的别名。

通常,使用关键字(例如int)或标识符(例如Int32)来引用内置类型没有区别。但是所有事情都有例外,所以我的问题分为两部分:

  1. C#何时需要您使用或不使用关键字?
  2. 何时使用关键字代替标识符会改变程序的含义?

8 个答案:

答案 0 :(得分:8)

C#不要求您使用其中一个,因为它们是等效的。这是个人偏好和编码惯例。因此,使用对您和您的团队来说更具可读性的那个。只有一个建议:保持一致:不要在代码库的一半中使用别名,在后半部分使用完整的类型名称。

答案 1 :(得分:2)

stringSystem.String类型的别名,intSystem.Int32的别名。因此,请根据自己的喜好使用。

答案 2 :(得分:2)

using alias directive 无法使用关键字作为类型名称(但可以在类型参数列表中使用关键字):

using Handle = int; // error
using Handle = Int32; // OK
using NullableHandle = Nullable<int>; // OK

必须使用关键字指定<{3}}

enum E : int { } // OK
enum E : Int32 { } // error

表达式(x)+y(x)-y(x)*y的解释会有所不同,具体取决于x是关键字还是标识符:

(int)+y // cast +y (unary plus) to int
(Int32)+y // add y to Int32; error if Int32 is not a variable
(Int32)(+y) // cast +y to Int32

(int)-y // cast -y (unary minus) to int
(Int32)-y // subtract y from Int32; error if Int32 is not a variable
(Int32)(-y) // cast -y to Int32

(int)*y // cast *y (pointer indirection) to int
(Int32)*y // multiply Int32 by y; error if Int32 is not a variable
(Int32)(*y) // cast *y to Int32

答案 3 :(得分:1)

标识符intstringbool等是真实类型Int32String和{{1}的C#语言别名}, 分别。使用哪个并不重要,但是在编写API时,有些人更喜欢将实际的类类型用于别名。

这是列出等价物的MSDN article

答案 4 :(得分:0)

没关系。 int基本上是System.Int32的简写,它们几乎可以完全互换。如果你愿意,可以考虑#define(但是C#不允许#defines这样)。

答案 5 :(得分:0)

一个问题是,奇怪的using或成员声明String / Int32可以映射到不同的类型(即不是mscorlib中的那个)或者甚至是另一种类型的成员,这会导致问题。

正如Jon所说,另一个问题是你不能使用标识符声明枚举(你得到错误“输入byte,sbyte,short,ushort,int,uint,long或ulong expected”)。

答案 6 :(得分:0)

它不要求您使用其中一个。但是,如果您想要更大或更小的int,您可能希望显式使用Int16或Int64而不是int,这是Int32的别名。

答案 7 :(得分:0)

我能想到的唯一情况是必需在一个表单中使用别名,否则你可能会使用类名称在enum类型的定义中:

public enum MyEnum:Byte //will not compile

public enum MyEnum:byte //correct

另请注意,枚举的定义需要使用alias关键字,而在定义可接受任何枚举类型的代码成员时,请使用类名Enum。

最后,您永远不能将System.ValueType指定为基类或泛型类型参数;您改为使用struct关键字,它实际上是从ValueType派生的对象的别名。