it-swarm-vi.tech

Tôi nên sử dụng int hay Int32

Trong C #, intInt32 là cùng một thứ, nhưng tôi đã đọc một số lần mà int được ưa thích hơn Int32 mà không có lý do nào được đưa ra. Có một lý do, và tôi nên quan tâm?

339
Graham

ECMA-334 : 2006 Đặc tả ngôn ngữ C # (p18):

Mỗi loại được xác định trước là tốc ký cho loại do hệ thống cung cấp. Ví dụ: từ khóa int đề cập đến struct System.Int32. Là một vấn đề về phong cách, việc sử dụng từ khóa được ưa chuộng hơn là sử dụng tên loại hệ thống hoàn chỉnh.

125
SpaceghostAli

Hai thực sự là đồng nghĩa; int sẽ trông quen thuộc hơn một chút, Int32 làm cho độ 32 bit rõ ràng hơn đối với những người đọc mã của bạn. Tôi sẽ có xu hướng sử dụng int trong đó tôi chỉ cần 'một số nguyên', Int32 trong đó kích thước là quan trọng (mã hóa, cấu trúc) để các nhà bảo trì trong tương lai sẽ biết an toàn khi phóng to int nếu thích hợp, nhưng nên cẩn thận thay đổi Int32 cùng một cách.

Mã kết quả sẽ giống hệt nhau: sự khác biệt hoàn toàn là sự dễ đọc hoặc xuất hiện mã.

265
James Sutherland

Cả hai đều khai báo số nguyên 32 bit, và như các áp phích khác đã nêu, cái nào bạn sử dụng chủ yếu là kiểu cú pháp. Tuy nhiên, họ không luôn luôn cư xử theo cùng một cách. Chẳng hạn, trình biên dịch C # sẽ không cho phép điều này:

public enum MyEnum : Int32
{
    member1 = 0
}

nhưng nó sẽ cho phép điều này:

public enum MyEnum : int
{
    member1 = 0
}

Đi hình.

84
raven

Tôi luôn sử dụng các loại hệ thống - ví dụ: Int32 thay vì int. Tôi đã áp dụng thực tiễn này sau khi đọc Lập trình .NET Framework được áp dụng - tác giả Jeffrey Richter tạo ra một trường hợp tốt để sử dụng tên loại đầy đủ . Đây là hai điểm mắc kẹt với tôi:

  1. Tên loại có thể khác nhau giữa các ngôn ngữ .NET. Ví dụ: trong C #, long ánh xạ tới System.Int64 trong khi ở C++ với các tiện ích mở rộng được quản lý, long ánh xạ tới Int32. Vì các ngôn ngữ có thể được trộn lẫn và khớp trong khi sử dụng .NET, bạn có thể chắc chắn rằng việc sử dụng tên lớp rõ ràng sẽ luôn rõ ràng hơn, bất kể ngôn ngữ ưa thích của người đọc.

  2. Nhiều phương thức khung có tên kiểu như là một phần của tên phương thức của chúng:

    BinaryReader br = new BinaryReader( /* ... */ );

    float val = br.ReadSingle(); // OK, but it looks a little odd...

    Single val = br.ReadSingle(); // OK, and is easier to read

48
Remi Despres-Smyth

int là một từ khóa C # và không rõ ràng.

Hầu hết thời gian nó không quan trọng nhưng hai điều đi ngược lại với Int32:

  • Bạn cần phải có "sử dụng Hệ thống;" tuyên bố. sử dụng "int" không yêu cầu sử dụng câu lệnh.
  • Có thể định nghĩa lớp riêng của bạn được gọi là Int32 (sẽ là ngớ ngẩn và khó hiểu). int luôn có nghĩa là int.
20
Brownie

Như đã nêu, int = Int32. Để an toàn, hãy đảm bảo luôn sử dụng int.MinValue/int.MaxValue khi thực hiện bất cứ điều gì quan tâm về ranh giới loại dữ liệu. Giả sử .NET đã quyết định rằng int bây giờ sẽ là Int64, mã của bạn sẽ ít phụ thuộc vào giới hạn hơn.

13
spoulson

Kích thước byte cho các loại không quá thú vị khi bạn chỉ phải xử lý một ngôn ngữ duy nhất (và đối với mã mà bạn không phải tự nhắc nhở về việc tràn toán học). Phần trở nên thú vị là khi bạn kết nối giữa ngôn ngữ này với ngôn ngữ khác, đối tượng C # sang COM, v.v. hoặc bạn đang thực hiện một số thay đổi hoặc che giấu và bạn cần phải tự nhắc nhở mình (và những người đồng kiểm tra mã của bạn) kích thước của dữ liệu.

Trong thực tế, tôi thường sử dụng Int32 chỉ để nhắc nhở bản thân kích thước của chúng vì tôi viết C++ được quản lý (để chuyển sang C # chẳng hạn) cũng như C++ không được quản lý/bản địa.

Miễn là bạn có thể biết, trong C # là 64 bit, nhưng trong C++ bản địa, nó kết thúc là 32 bit hoặc char là unicode/16 bit trong khi ở C++ là 8 bit. Nhưng làm thế nào để chúng ta biết điều này? Câu trả lời là bởi vì chúng tôi đã tra cứu nó trong hướng dẫn và nó đã nói như vậy.

Với thời gian và kinh nghiệm, bạn sẽ bắt đầu có ý thức hơn khi bạn viết mã để kết nối giữa C # và các ngôn ngữ khác (một số độc giả ở đây đang nghĩ "tại sao bạn?"), Nhưng IMHO tôi tin rằng đó là một cách thực hành tốt hơn bởi vì Tôi không thể nhớ những gì tôi đã mã hóa tuần trước (hoặc tôi không phải chỉ định trong tài liệu API của mình rằng "tham số này là số nguyên 32 bit").

Trong F # (mặc dù tôi chưa bao giờ sử dụng nó), họ xác định int , int32 bản địa . Câu hỏi tương tự sẽ xuất hiện, "tôi sử dụng cái nào?". Như những người khác đã đề cập, trong hầu hết các trường hợp, nó không thành vấn đề (nên minh bạch). Nhưng tôi vì người ta sẽ chọn int32 và uint32 chỉ để xóa đi sự mơ hồ.

Tôi đoán nó sẽ chỉ phụ thuộc vào những ứng dụng bạn đang mã hóa, ai đang sử dụng nó, những gì bạn thực hành mã hóa và nhóm của bạn tuân theo, v.v. để biện minh khi nào nên sử dụng Int32.

9
HidekiAI

Không có sự khác biệt giữa intInt32, nhưng vì int là một từ khóa ngôn ngữ mà nhiều người thích nó theo phong cách (giống như với string so với String).

8
Simon Steele

Theo kinh nghiệm của tôi, đó là một điều thông thường. Tôi không biết bất kỳ lý do kỹ thuật nào để sử dụng int trên Int32, nhưng đó là:

  1. Nhanh hơn để gõ.
  2. Quen thuộc hơn với nhà phát triển C # điển hình.
  3. Một màu khác nhau trong tô sáng cú pháp hình ảnh mặc định.

Tôi đặc biệt thích cái cuối cùng đó. :)

7
Greg D

Tôi luôn sử dụng các loại bí danh (int, chuỗi, v.v.) khi xác định một biến và sử dụng tên thật khi truy cập một phương thức tĩnh:

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

Nó chỉ có vẻ xấu khi thấy một cái gì đó như int.TryPude (). Không có lý do nào khác tôi làm điều này ngoài phong cách.

6
Mark A. Nicolosi

Mặc dù chúng (hầu hết) giống hệt nhau (xem bên dưới về sự khác biệt [lỗi]), bạn chắc chắn nên quan tâm và bạn nên sử dụng Int32.

  • Tên của số nguyên 16 bit là Int16. Đối với số nguyên 64 bit, đó là Int64 và đối với số nguyên 32 bit, lựa chọn trực quan là: int hay Int32?

  • Câu hỏi về kích thước của một biến loại Int16, Int32 hoặc Int64 là tự tham khảo, nhưng câu hỏi về kích thước của biến int là một câu hỏi và câu hỏi hoàn toàn hợp lệ, bất kể tầm thường, có gây mất tập trung, dẫn đến để nhầm lẫn, lãng phí thời gian, cản trở thảo luận, vv (thực tế câu hỏi này tồn tại chứng minh quan điểm).

  • Sử dụng Int32 thúc đẩy rằng nhà phát triển có ý thức về sự lựa chọn loại của họ. Làm thế nào lớn là một int một lần nữa? Ồ vâng, 32. Khả năng kích thước của loại thực sự sẽ được xem xét là lớn hơn khi kích thước được bao gồm trong tên. Sử dụng Int32 cũng thúc đẩy kiến ​​thức về các lựa chọn khác. Khi mọi người không buộc phải nhận ra ít nhất có những lựa chọn thay thế, việc int trở thành "kiểu số nguyên" trở nên quá dễ dàng.

  • Lớp trong khung dự định tương tác với các số nguyên 32 bit được đặt tên là Int32. Một lần nữa, đó là: trực quan hơn, ít gây nhầm lẫn hơn, thiếu bản dịch (không cần thiết) (không phải là bản dịch trong hệ thống, nhưng trong tâm trí của nhà phát triển), v.v. int lMax = Int32.MaxValue hoặc Int32 lMax = Int32.MaxValue?

  • int không phải là một từ khóa trong tất cả các ngôn ngữ .NET.

  • Mặc dù có nhiều lý do tại sao nó không có khả năng thay đổi, int có thể không phải luôn luôn là một Int32.

Hạn chế là hai ký tự phụ để gõ và [bug].

Điều này sẽ không được biên dịch

public enum MyEnum : Int32
{
    AEnum = 0
}

Nhưng điều này sẽ:

public enum MyEnum : int
{
    AEnum = 0
}
5
unknown (yahoo)

Tôi biết rằng cách thực hành tốt nhất là sử dụng int và tất cả mã MSDN sử dụng int. Tuy nhiên, không có lý do nào ngoài tiêu chuẩn hóa và tính nhất quán theo như tôi biết.

5
Raithlin

Bạn không nên quan tâm. Bạn nên sử dụng int hầu hết thời gian. Nó sẽ giúp chuyển chương trình của bạn sang một kiến ​​trúc rộng hơn trong tương lai (hiện tại int là bí danh của System.Int32 nhưng điều đó có thể thay đổi). Chỉ khi độ rộng bit của biến quan trọng (ví dụ: để kiểm soát bố cục trong bộ nhớ của struct), bạn mới nên sử dụng int32 và các thứ khác (với "using System;" được liên kết).

4
yhdezalvarez

Tôi khuyên bạn nên sử dụng Microsoft StyleCop .

Nó giống như FxCop , nhưng đối với các vấn đề liên quan đến phong cách. Cấu hình mặc định phù hợp với hướng dẫn kiểu dáng bên trong của Microsoft, nhưng nó có thể được tùy chỉnh cho dự án của bạn.

Nó có thể mất một chút để làm quen, nhưng nó chắc chắn làm cho mã của bạn đẹp hơn.

Bạn có thể đưa nó vào quá trình xây dựng để tự động kiểm tra các vi phạm.

3
devstuff

int giống như System.Int32 và khi được biên dịch, nó sẽ biến thành điều tương tự trong CIL .

Chúng tôi sử dụng int theo quy ước trong C # vì C # muốn trông giống C và C++ (và Java) và đó là những gì chúng tôi sử dụng ở đó ...

BTW, tôi cuối cùng sử dụng System.Int32 khi khai báo nhập các hàm Windows API khác nhau. Tôi không chắc đây có phải là một quy ước được xác định hay không, nhưng nó nhắc nhở tôi rằng tôi sẽ đến một DLL bên ngoài ...

3
Jack Bolding

Ngày xửa ngày xưa, kiểu dữ liệu int được gắn với kích thước thanh ghi của máy được trình biên dịch nhắm tới. Vì vậy, ví dụ, trình biên dịch cho hệ thống 16 bit sẽ sử dụng số nguyên 16 bit.

Tuy nhiên, chúng tôi rất may không thấy nhiều 16 bit nữa và khi 64 bit bắt đầu trở nên phổ biến, mọi người quan tâm nhiều hơn đến việc làm cho nó tương thích với phần mềm cũ hơn và 32 bit đã tồn tại quá lâu đối với hầu hết các trình biên dịch - int chỉ được giả sử là 32 bit.

3
Joel Coehoorn

int là lối tắt của ngôn ngữ C # cho System.Int32

Trong khi điều này không có nghĩa là Microsoft có thể thay đổi ánh xạ này, một bài đăng trên các cuộc thảo luận của FogCalet đã nêu [nguồn]

"Về vấn đề 64 bit - Microsoft thực sự đang làm việc trên phiên bản .NET Framework 64 bit nhưng tôi khá chắc chắn int sẽ KHÔNG ánh xạ tới 64 bit trên hệ thống đó.

Lý do:

1. Tiêu chuẩn C # ECMA nói cụ thể rằng int là 32 bit và dài là 64 bit.

2. Microsoft đã giới thiệu các thuộc tính & phương thức bổ sung trong Khung phiên bản 1.1 trả về các giá trị dài thay vì các giá trị int, chẳng hạn như Array.GetLongLpm ngoài Array.GetLpm.

Vì vậy, tôi nghĩ an toàn khi nói rằng tất cả các loại C # tích hợp sẽ giữ ánh xạ hiện tại của chúng. "

3
Ray Hayes

Bạn không nên quan tâm. Nếu kích thước là một mối quan tâm tôi sẽ sử dụng byte, short, int, sau đó dài. Lý do duy nhất bạn sẽ sử dụng một int lớn hơn int32 là nếu bạn cần một số cao hơn 2147483647 hoặc thấp hơn -2147483648.

Ngoài ra, tôi không quan tâm, có rất nhiều mặt hàng khác cần được quan tâm.

2
David Basarab

intInt32 giống nhau. int là bí danh cho Int32.

2
Jesper Kihlberg

Nó không có sự khác biệt trong thực tế và trong thời gian bạn sẽ áp dụng quy ước của riêng bạn. Tôi có xu hướng sử dụng từ khóa khi gán một loại và phiên bản lớp khi sử dụng các phương thức tĩnh và như vậy:

int Total = Int32.Pude ("1009");

2
chrisb

int là bí danh cho System.Int32, như được định nghĩa trong bảng này: Bảng loại tích hợp (Tham chiếu C #)

1
Jim T

Sử dụng Int hoặc Int32 là cùng một Int chỉ là đường để đơn giản hóa mã cho người đọc.

Sử dụng biến thể Nullable Int? hay Int32? khi bạn làm việc với cơ sở dữ liệu trên các trường có chứa null. Điều đó sẽ cứu bạn khỏi rất nhiều vấn đề thời gian chạy.

0
bovium

Một thời gian trước, tôi đang làm việc trong một dự án với Microsoft khi chúng tôi có một chuyến thăm từ một người nào đó trong nhóm sản phẩm Microsoft .NET CLR. Người này đã mã hóa các ví dụ và khi anh ta xác định các biến của mình, anh ta đã sử dụng kiểu Int Intex và so với int int và và String String.

Tôi đã nhớ đã thấy phong cách này trong mã ví dụ khác từ Microsoft. Vì vậy, tôi đã thực hiện một số nghiên cứu và thấy rằng mọi người đều nói rằng không có sự khác biệt nào giữa các loại Int Int Int, và trừ int int. Trên thực tế, tôi đã tìm thấy rất nhiều tài liệu đề nghị bạn sử dụng Int Int32 để làm cho mã của bạn dễ đọc hơn. Vì vậy, tôi đã áp dụng phong cách.

Hôm nọ tôi đã tìm thấy một sự khác biệt! Trình biên dịch doesn không cho phép bạn gõ enum bằng cách sử dụng Int Int Int, nhưng nó thực hiện khi bạn sử dụng int int int. Don Patrick hỏi tôi tại sao vì tôi không biết.

Thí dụ:

public  enum MyEnum : Int32
{
    AEnum = 0
}

Những công việc này.

public enum MyEnum : int
{
    AEnum = 0
}

Lấy từ: ký hiệu Int32 so với int

0
Schmuli

Một số trình biên dịch có kích thước khác nhau cho int trên các nền tảng khác nhau (không phải C # cụ thể)

Một số tiêu chuẩn mã hóa (MISRA C) yêu cầu tất cả các loại được sử dụng là kích thước được chỉ định (nghĩa là Int32 chứ không phải int).

Cũng tốt khi chỉ định tiền tố cho các biến loại khác nhau (ví dụ: b cho byte 8 bit, w cho Word 16 bit và l cho Word dài 32 bit => Int32 lMyVariable)

Bạn nên quan tâm bởi vì nó làm cho mã của bạn dễ mang theo hơn và dễ bảo trì hơn.

Portable có thể không áp dụng được cho C # nếu bạn luôn sử dụng C # và đặc tả C # sẽ không bao giờ thay đổi về vấn đề này.

Ihmo có thể duy trì sẽ luôn được áp dụng, bởi vì người duy trì mã của bạn có thể không biết về đặc tả C # cụ thể này và bỏ lỡ một lỗi là do dịp này trở thành hơn 2147483647.

Trong một vòng lặp for đơn giản, ví dụ như các tháng trong năm, bạn sẽ không quan tâm, nhưng khi bạn sử dụng biến trong bối cảnh có thể có khả năng tăng cường, bạn nên quan tâm.

Bạn cũng nên quan tâm nếu bạn sẽ thực hiện các thao tác bit-khôn ngoan trên nó.

0
user11211

Bạn không nên quan tâm đến hầu hết các ngôn ngữ lập trình, trừ khi bạn cần viết các hàm toán học rất cụ thể hoặc mã được tối ưu hóa cho một kiến ​​trúc cụ thể ... Chỉ cần đảm bảo kích thước của loại là đủ cho bạn (sử dụng thứ gì đó lớn hơn Int nếu bạn biết bạn sẽ cần nhiều hơn 32 bit chẳng hạn)

0
Stacker

Sử dụng loại Int32 yêu cầu tham chiếu không gian tên đến System hoặc đủ điều kiện (System.Int32). Tôi có xu hướng về int, vì nó không yêu cầu nhập không gian tên, do đó làm giảm khả năng xung đột không gian tên trong một số trường hợp. Khi được biên dịch sang IL, không có sự khác biệt giữa hai.

0
Michael Meadows

Nó không thành vấn đề. int là từ khóa ngôn ngữ và Int32 loại hệ thống thực tế của nó.

Xem thêm trả lời tại đây cho một câu hỏi liên quan.

0
Keith

Theo Cửa sổ ngay lập tức trong Visual Studio 2012 Int32 là int, Int64 dài. Đây là đầu ra:

sizeof(int)
4
sizeof(Int32)
4
sizeof(Int64)
8
Int32
int
    base {System.ValueType}: System.ValueType
    MaxValue: 2147483647
    MinValue: -2147483648
Int64
long
    base {System.ValueType}: System.ValueType
    MaxValue: 9223372036854775807
    MinValue: -9223372036854775808
int
int
    base {System.ValueType}: System.ValueType
    MaxValue: 2147483647
    MinValue: -2147483648
0
Selim

Cũng xem xét Int16. Nếu bạn cần lưu trữ Số nguyên trong bộ nhớ trong ứng dụng của mình và bạn lo ngại về dung lượng bộ nhớ được sử dụng, thì bạn có thể sử dụng Int16 vì nó sử dụng ít memeory hơn và có phạm vi tối thiểu/tối thiểu nhỏ hơn Int32 (đó là int .)

0
Chris Pietschmann