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


352

Trong C #, intInt32là điều tương tự, nhưng tôi đã đọc một số lần intđược ưu tiên hơn Int32mà không có lý do nào được đưa ra. Có một lý do, và tôi nên quan tâm?


Tweet của Skeet về điều này khi anh ấy ủng hộ Int32 hơn int khi lập trình API.
comecme

@JohnBubriski: và đừng quên rằng nó yêu cầu sử dụng ít câu lệnh hơn để sử dụng nó (hoặc bạn sẽ gõ System.Int32)
sehe

Tôi có Câu hỏi: chúng tôi không sử dụng loại CLR trực tiếp nhưng tại sao chúng tôi cần chúng ??
AminM

@JohnBubriski Cập nhật trạng thái Facebook dễ gõ hơn một đoạn mã. Suy nghĩ xấu đấy! Dễ đọc và hiểu là quan trọng hơn nhiều so với dễ gõ. When something can be read without effort, great effort has gone into its writing. Easy writing is hard reading
7hi4g0

Câu trả lời:


134

Đặc tả ngôn ngữ C # ECMA-334 : 2006 (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 cấu trúc 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.


271

Hai thực sự là đồng nghĩa; intsẽ trông quen thuộc hơn một chút, Int32là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ở nơi tôi chỉ cần 'số nguyên', Int32trong đó 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 intnếu thích hợp, nhưng nên cẩn thận thay đổi Int32theo cách tương tự.

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ã.


65
Mọi người đọc mã của bạn nên biết rằng int là bí danh cho System.Int32. Liên quan đến khả năng đọc, tính nhất quán là quan trọng hơn nhiều.
Quân đội Thomsen

11
Đối với những bạn có tư duy C ++ cũ, IntPtr được thiết kế thành 32 bit trên HĐH 32 bit và 64 bit trên HĐH 64 bit. Hành vi này được đề cập cụ thể trong thẻ tóm tắt của nó. msdn.microsoft.com/en-us/l Library / system.intptr (VS.71) .aspx
diadem

87

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.


9
Nếu bạn sử dụng Reflector để kiểm tra loại System.Int32, bạn sẽ thấy rằng nó là một cấu trúc chứ không phải là một lớp. Mã trông như thế này: [serializable, StructLayout (LayoutKind.Sequential), ComVisible (true)] public struct Int32: IComparable, IFormattable, IConvertible, IComparable <int>, IEquitable <int> {public const int MaxValue = ... Bạn không thể lấy được một loại từ một cấu trúc. Ít nhất bạn sẽ nhận được một lỗi cho bạn biết như vậy. Tuy nhiên, hành vi của enum hơi khác một chút, tôi sẽ bình luận tiếp theo.
raddevus

16
Không thể lấy được enum từ Int32 là một hành vi được thiết kế, cũng có thể được nhìn thấy bằng cách xem mã .NET: [serializable, ComVisible (true)] lớp trừu tượng công khai Enum: ValueType, IComparable, IFormattable, Thông báo rằng Enum có nguồn gốc từ ValueType? Nếu bạn cố gắng lấy enum từ một thứ khác ngoài kiểu dữ liệu nội tại (int, byte, v.v.), bạn sẽ nhận được một lỗi giống như: Nhập byte, sbyte, short, ushort, int, uint, long hoặc ulong .
raddevus

2
@daylight lưu ý rằng việc chỉ định enumsử dụng intkhông phải là một derive, nhưng chỉ định một underlying type; xem msdn.microsoft.com/en-us/l
Library / sbbt4032.aspx # code-snippet

2
@JeroenWiertPluimers Tuy nhiên, điều thú vị là tại sao họ lại chọn kiểm tra loại cơ bản và ném CS1008 theo nghĩa đen , vì loại cơ bản chỉ là loại hằng số trong enum, vì vậy nó không thực sự quan trọng khi được biên dịch.
IllidanS4 muốn Monica trở lại vào

5
@ IllidanS4, với trình biên dịch mới Roslyn - điều này đã được sửa và cả hai biến thể hợp lệ
Grundy

49

Tôi luôn sử dụng các loại hệ thống - ví dụ, Int32thay vì int. Tôi đã áp dụng thực tiễn này sau khi đọc Lập trình .NET Framework ứng dụng - tác giả Jeffrey Richter đưa ra một trường hợp tốt để sử dụng tên đầ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

Một vấn đề với điều này là Visual Studio tự động hoàn thành vẫn sử dụng int. Vì vậy, nếu bạn thực hiện List<Tuple<Int32, Boolean>> test = new, Visual Studio sẽ chèn List<Tuple<int, bool>>(). Bạn có biết một cách để thay đổi những tự động hoàn thành này không?
MrFox

2
Vâng, nó là một vấn đề; không, tôi không biết làm thế nào để thay đổi chúng một cách thủ công. Điểm # 2 không còn là vấn đề đối với tôi nữa, vì tôi có xu hướng sử dụng varcàng nhiều càng tốt để giảm độ dài của mã. Ở những nơi thỉnh thoảng có tự động hoàn thành xuất hiện và nhổ lên sàn nhà của tôi, tôi điều chỉnh thủ công - đó thực sự là một hoặc hai giây của tôi.
Remi Despres-Smyth

20

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.

Cũng có thể tạo lớp 'var' của riêng bạn, nhưng điều đó không ngăn cản mọi người sử dụng nó.
Neme

Mỗi từ khóa là một từ khóa C #. int đã được sử dụng trong C và C ++. Vì vậy, không có gì cụ thể về C # về nó.
MrFox

12

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


8
@spoulson: Lỗi nhận xét trên dòng 1: Chuyển nhượng bị cấm giữa các loại bằng nhau. Vâng, một trò đùa xấu.
Johann Gerell

22
Nếu C # spec (đó là một C #, không NET quyết định) bao giờ quyết định thay đổi để làm cho int64 bit, đó sẽ là như vậy một sự thay đổi phá vỡ mà tôi không tin nó có thể (hoặc chắc chắn hợp lý) vào mã phòng thủ chống lại tình huống như vậy.
Jon Skeet

9

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ọ định nghĩa int , int32 và bản gốc . 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 cho một người sẽ chọn int32 và uint32 chỉ để loại bỏ 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.


Điều đó không làm mất hiệu lực mục đích của .net? Dù sao thì F # là gì, một ý tưởng mà Gates đã có khi nghỉ hưu ...
Nick Turner

8

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


7

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

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.


5

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 gì ngoài tiêu chuẩn hóa và tính nhất quán theo như tôi biết.


5

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 bị buộc phải nhận ra ít nhất là 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 một 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.MaxValuehay 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
}

Bạn nói "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 hoặc Int32?", Nhưng cũng có các từ khóa C #. Int16 = short Int64 = long Vì vậy, điểm một trong những câu trả lời của bạn dựa trên giả định không chính xác.
Mel

"biến kiểu int là một câu hỏi và câu hỏi hoàn toàn hợp lệ, cho dù tầm thường đến mức nào, 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, v.v. (thực tế câu hỏi này tồn tại chứng minh quan điểm)." Bạn đang đùa tôi à Bạn làm việc bằng ngôn ngữ mà bạn không hiểu đầy đủ những gì đằng sau mui xe. Nếu nhà phát triển không hiểu loại nguyên thủy nào tương đương với anh ta thì nên tiếp nhận nghệ thuật ẩm thực. Âm thanh như một nhà phát triển VB. sử dụng nguyên thủy có nguồn gốc từ bất kỳ ngôn ngữ nào và nên được ưu tiên. Sẽ tốt thôi nếu bạn không thích người nguyên thủy, nhưng không tạo nên thực tế.
Nick Turner

Hmm, tôi hoàn toàn không đồng ý với ý kiến ​​của bạn rằng tôi nên quan tâm ... nhưng tôi không biết rằng enums chỉ có thể kế thừa từ các từ khóa. Một sự thật khá vô dụng, nhưng vẫn rất vui khi biết :)
Jowen

4

Bạn không nên quan tâm. Bạn nên sử dụng inthầ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 intlà bí danh System.Int32như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 a struct), bạn nên sử dụng int32và các thứ khác (với " using System;") được liên kết .


1
Bạn không thể nghiêm túc ... làm cho việc chuyển dễ dàng hơn? Tôi không nghĩ rằng việc tìm và thay thế là một vấn đề lớn.
Vince Panuccio

2
(hiện tại int là bí danh của System.Int32 nhưng điều đó có thể thay đổi) ? Oh đến một ... Bạn có nghiêm túc không?
Oybek

Tại sao bạn lại viết mã bằng ngôn ngữ mà cuối cùng bạn muốn bỏ rác? Có vẻ như bởi quyết định quản lý. Sử dụng int hoặc Int32. Int32 trông giống như VB
Nick Turner

Điều tôi muốn nói là MAYBE, (và đó là một MAYBE lớn, tôi thực sự không biết tại sao các nhà thiết kế lại làm như vậy) bạn nên có cách khai báo một int có cùng chiều rộng mà vòm bạn đang chạy, như C 'int / long / ... hoạt động. Đây là một cơ chế (int to alias int32) dường như được thiết kế để thực hiện chính xác điều này. Và hãy xem xét Microsoft luôn khuyến nghị sử dụng "int" so với "Int32" (giống như họ sẽ làm nếu đây là ý định ban đầu của họ). Tôi biết, đó là một IF lớn ... Khi tôi viết câu trả lời này, không có khung .NET 64 bit nào, vì vậy tôi không biết họ sẽ làm gì trong trường hợp đó.
Yanko Hernández Alvarez

3

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ì giá trị int, chẳng hạn như Array.GetLongLpm ngoài Array.GetLpm.

Vì vậy, tôi nghĩ thật 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. "


Nếu phiên bản 64 bit được giới thiệu, có lẽ họ sẽ thêm 'bản gốc' vào C # (vì hiện tại nó được sử dụng trong F #). Điều này chỉ củng cố rằng việc giới thiệu 'int' và xác định đây là Int32 là một sai lầm! Và do đó không nhất quán từ một API (ví dụ ReadInt32 chứ không phải ReadInt), màu sắc (tối so với xanh nhạt) và độ nhạy trường hợp (DateTime so với int). tức là tại sao loại giá trị 'DateTime' không có bí danh như Int32?
Carlo Bos

3

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

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 đến nỗi đối với hầu hết các trình biên dịch int chỉ được giả định là 32 bit.


3

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

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 nội bộ 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.


Tôi hoàn toàn không đồng ý với StyleCop về điều này. Vâng, nó tốt nhưng tôi thích sử dụng Int32 hơn, tại sao? như để tránh câu trả lời như hai câu trả lời. Mọi người nhầm lẫn Int32 với cách ints được thể hiện trong C
John Demetriou

2

intInt32là như nhau. intlà một bí danh cho Int32.


int không phải là bí danh, nó là một từ khóa. Xem các câu trả lời khác.
Timores

int chắc chắn là một từ khóa cho ngôn ngữ nhưng nó cũng có thể được gọi là bí danh của System.Int32. Ngoài ra, một cách khác để nghĩ về điều này là bạn có using int = System.Int32; chỉ thị cho tất cả các tệp mã nguồn của mình.
uygar donduran

2

Bạn không nên quan tâm. Nếu kích thước là 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.


Tôi muốn thêm rằng bạn có thể sử dụng từ khóa "dài" thay vì System.Int64
Keith

22
Bạn đã hiểu nhầm câu hỏi. OP đang hỏi liệu có sự khác biệt giữa các khai báo "int i" và "Int32 i" không.
quạ

2

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.Parse("1009");


1

Tôi sử dụng int trong trường hợp Microsoft thay đổi cài đặt mặc định cho một số nguyên thành một số phiên bản có răng cưa mới (hãy gọi nó là Int32b).

Microsoft sau đó có thể thay đổi bí danh int thành Int32b và tôi không phải thay đổi bất kỳ mã nào của mình để tận dụng triển khai số nguyên mới (và hy vọng được cải thiện) của chúng.

Điều tương tự cũng xảy ra với bất kỳ từ khóa loại nào.


0

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 rằng bạn sẽ cần nhiều hơn 32 bit chẳng hạn)


0

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 câu trả lời của tôi ở đây cho một câu hỏi liên quan.


0

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

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 (ví dụ Int32 và không 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 từ 16 bit và l cho từ 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à việc 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ó.


Nó không có sự khác biệt trong .Net - int luôn là Int32 và dài luôn là Int64
Keith

It is also good to specify prefixes for different type variablesKý hiệu Hungary phần lớn không được chấp nhận hiện nay và hầu hết các phong cách mã hóa không khuyến khích việc sử dụng nó. Các quy ước nội bộ của các công ty phần mềm cũng thường cấm ký hiệu đó
phuclv

0

Sử dụng Int32kiểu này yêu cầu tham chiếu không gian tên Systemhoặc đủ điều kiện ( System.Int32). Tôi hướng tới int, bởi 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

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

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

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 trực tiếp và ngoại trừ. 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 không cho phép bạn gõ enum bằng cách sử dụng Int Int Int, nhưng nó cũng hoạt động khi bạn sử dụng trực tiếp. Đừng hỏi tôi tại sao vì tôi chưa 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.