Soll ich int oder Int32 verwenden


352

In C # und intund Int32sind das gleiche, aber ich habe einige Male gelesen, die ohne Angabe von Gründen intbevorzugt werden Int32. Gibt es einen Grund und sollte es mich interessieren?


Tweet des Skeets darüber, wo er Int32 gegenüber int bevorzugt, wenn er APIs programmiert.
Comecme

@ JohnBubriski: und vergessen wir nicht, dass es weniger using-Anweisungen erfordert, um es zu verwenden (oder Sie würden System.Int32
tippen

Ich habe Frage: Wir verwenden den CLR-Typ nicht direkt, aber warum brauchen wir sie?
AminM

@JohnBubriski Facebook Status Update ist einfacher zu tippen als ein Stück Code. Schlechtes Denken dort! Einfacher zu lesen und zu verstehen ist weitaus wichtiger als einfacher zu tippen. When something can be read without effort, great effort has gone into its writing. Easy writing is hard reading
7hi4g0

Antworten:


134

ECMA-334 : 2006 C # -Sprachspezifikation (S. 18):

Jeder der vordefinierten Typen ist eine Abkürzung für einen vom System bereitgestellten Typ. Beispielsweise intbezieht sich das Schlüsselwort auf die Struktur System.Int32. Aus Gründen des Stils wird die Verwendung des Schlüsselworts der Verwendung des vollständigen Systemtypnamens vorgezogen.


271

Die beiden sind in der Tat synonym; intwird ein wenig vertrauter aussehen, Int32macht die 32-Bit für diejenigen, die Ihren Code lesen, expliziter. Ich würde gerne dort verwenden, intwo ich nur eine Ganzzahl benötige, Int32wo die Größe wichtig ist (kryptografischer Code, Strukturen), damit zukünftige Betreuer wissen, dass es sicher ist, eine intgegebenenfalls zu vergrößern , aber darauf achten sollten, Int32s auf die gleiche Weise zu ändern .

Der resultierende Code ist identisch: Der Unterschied besteht lediglich in der Lesbarkeit oder dem Erscheinungsbild des Codes.


65
Personen, die Ihren Code lesen, sollten wissen, dass int ein Alias ​​für System.Int32 ist. In Bezug auf die Lesbarkeit ist die Konsistenz weitaus wichtiger.
Troels Thomsen

11
Für diejenigen unter Ihnen mit der alten C ++ - Denkweise ist IntPtr auf 32 Bit unter einem 32-Bit-Betriebssystem und 64 Bit auf einem 64-Bit-Betriebssystem ausgelegt. Dieses Verhalten wird in der Zusammenfassung ausdrücklich erwähnt. msdn.microsoft.com/en-us/library/system.intptr(VS.71).aspx
Diadem

87

Beide deklarieren 32-Bit-Ganzzahlen, und wie andere Poster bereits angegeben haben, hängt es hauptsächlich vom syntaktischen Stil ab, welche Sie verwenden. Sie verhalten sich jedoch nicht immer gleich. Der C # -Compiler lässt dies beispielsweise nicht zu:

public enum MyEnum : Int32
{
    member1 = 0
}

aber es wird dies erlauben:

public enum MyEnum : int
{
    member1 = 0
}

Stelle dir das vor.


9
Wenn Sie Reflector verwenden, um den Typ System.Int32 zu untersuchen, werden Sie feststellen, dass es sich um eine Struktur und nicht um eine Klasse handelt. Der Code sieht folgendermaßen aus: [Serializable, StructLayout (LayoutKind.Sequential), ComVisible (true)] öffentliche Struktur Int32: IComparable, IFormattable, IConvertible, IComparable <int>, IEquatable <int> {public const int MaxValue = 0x7fffffff; ... Sie können keinen Typ aus einer Struktur ableiten. Zumindest erhalten Sie eine Fehlermeldung, die Sie darüber informiert. Das Enum-Verhalten ist jedoch etwas anders, was ich als nächstes kommentieren werde.
Raddevus

16
Die Unfähigkeit, eine Aufzählung aus dem Int32 abzuleiten, ist ein entworfenes Verhalten, das auch anhand des .NET-Codes gesehen werden kann: [Serializable, ComVisible (true)] öffentliche abstrakte Klasse Enum: ValueType, IComparable, IFormattable, Beachten Sie, dass Enum abgeleitet ist von ValueType? Wenn Sie versuchen, eine Aufzählung von etwas anderem als einem intrinsischen Datentyp (int, byte usw.) abzuleiten, wird folgende Fehlermeldung angezeigt: Geben Sie byte, sbyte, short, ushort, int, uint, long oder ulong erwartet ein .
Raddevus

2
@daylight Beachten Sie, dass die Angabe eines enumzu verwendenden intnicht ein derive, sondern ein underlying type; siehe msdn.microsoft.com/en-us/library/sbbt4032.aspx#code-snippet-2
Jeroen Wiert Pluimers

2
@JeroenWiertPluimers Es ist jedoch immer noch interessant, warum sie sich entschieden haben, den zugrunde liegenden Typ buchstäblich zu überprüfen und CS1008 zu werfen , da der zugrunde liegende Typ nur der Typ der Konstanten in der Aufzählung ist, sodass es beim Kompilieren nicht wirklich wichtig ist.
IllidanS4 will Monica

5
@ IllidanS4, mit neuem Compiler Roslyn - dies wurde behoben und beide Varianten gültig
Grundy

49

Ich benutze immer die Systemtypen - zB Int32statt int. Ich habe diese Vorgehensweise nach dem Lesen von Applied .NET Framework Programming übernommen. Der Autor Jeffrey Richter spricht sich für die Verwendung der vollständigen Typnamen aus. Hier sind die beiden Punkte, die mir aufgefallen sind:

  1. Typnamen können zwischen .NET-Sprachen variieren. In C # werden beispielsweise longSystem.Int64 zugeordnet, während in C ++ mit verwalteten Erweiterungen longInt32 zugeordnet wird. Da Sprachen während der Verwendung von .NET gemischt und abgeglichen werden können, können Sie sicher sein, dass die Verwendung des expliziten Klassennamens immer klarer ist, unabhängig von der bevorzugten Sprache des Lesers.

  2. Viele Framework-Methoden haben Typnamen als Teil ihrer Methodennamen:

    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

Ein Problem dabei ist, dass die automatische Vervollständigung von Visual Studio weiterhin int verwendet. Wenn Sie also eine List<Tuple<Int32, Boolean>> test = newerstellen, wird Visual Studio jetzt eingefügt List<Tuple<int, bool>>(). Kennen Sie eine Möglichkeit, diese automatischen Vervollständigungen zu ändern?
MrFox

2
Ja, das ist ein Problem. Nein, ich weiß nicht, wie ich sie sofort ändern soll. Punkt 2 ist für mich kein Problem mehr, da ich dazu neige, varso viel wie möglich zu verwenden, um die Worthaftigkeit des Codes zu verringern. An den gelegentlichen Stellen, an denen die automatische Vervollständigung eintritt und auf meinen Boden spuckt, passe ich mich manuell an - es sind buchstäblich ein oder zwei Sekunden meiner Zeit.
Remi Despres-Smyth

20

int ist ein C # -Schlüsselwort und eindeutig.

Meistens spielt es keine Rolle, aber zwei Dinge, die gegen Int32 sprechen:

  • Sie benötigen ein "using System". Aussage. Die Verwendung von "int" erfordert keine using-Anweisung.
  • Es ist möglich, eine eigene Klasse namens Int32 zu definieren (was albern und verwirrend wäre). int bedeutet immer int.

Es ist auch möglich, eine eigene 'var'-Klasse zu erstellen, aber das hält die Leute nicht davon ab, sie zu verwenden.
Neme

Jedes Schlüsselwort ist ein C # -Schlüsselwort. int wurde bereits in C und C ++ verwendet. Es gibt also nichts spezielles C #.
MrFox

12

Wie bereits erwähnt, int= Int32. Verwenden Sie aus Sicherheitsgründen immer int.MinValue/, int.MaxValuewenn Sie etwas implementieren, das sich um die Datentypgrenzen kümmert. Es sei entschieden .NET , dass intjetzt wäre Int64, wäre der Code weniger abhängig von den Grenzen.


8
@spoulson: Kommentarfehler in Zeile 1: Zuordnung zwischen gleichen Typen verboten. Ja, ein schlechter Witz.
Johann Gerell

22
Wenn das C # spec (es ist eine C #, nicht .NET Entscheidung) je Änderung beschlossen, macht int64 Bits, das wäre solch eine unterbrechende Änderung , dass ich nicht glaube , es ist möglich (oder sicherlich sinnvoll) , um Code defensiv gegen solche Eventualitäten.
Jon Skeet

9

Die Bytegröße für Typen ist nicht allzu interessant, wenn Sie sich nur mit einer einzigen Sprache befassen müssen (und für Code, an den Sie sich nicht an mathematische Überläufe erinnern müssen). Der Teil, der interessant wird, ist, wenn Sie eine Brücke zwischen einer Sprache zu einer anderen, einem C # zu einem COM-Objekt usw. schlagen oder eine Bitverschiebung oder Maskierung durchführen und sich selbst (und Ihre Co-Woker bei der Codeüberprüfung) daran erinnern müssen. der Größe der Daten.

In der Praxis verwende ich normalerweise Int32, um mich daran zu erinnern, wie groß sie sind, da ich verwaltetes C ++ (zum Beispiel zur Überbrückung von C #) sowie nicht verwaltetes / natives C ++ schreibe.

Solange Sie wahrscheinlich wissen, ist C # 64-Bit, in nativem C ++ jedoch 32-Bit oder char Unicode / 16-Bit, während es in C ++ 8-Bit ist. Aber woher wissen wir das? Die Antwort ist, weil wir es im Handbuch nachgeschlagen haben und es so gesagt hat.

Mit der Zeit und den Erfahrungen werden Sie typenbewusster, wenn Sie Codes schreiben, um eine Brücke zwischen C # und anderen Sprachen zu schlagen (einige Leser hier denken "Warum sollten Sie?"), Aber meiner Meinung nach ist dies eine bessere Praxis, weil Ich kann mich nicht erinnern, was ich letzte Woche codiert habe (oder ich muss in meinem API-Dokument nicht angeben, dass "dieser Parameter eine 32-Bit-Ganzzahl ist").

In F # (obwohl ich es nie benutzt habe) definieren sie int , int32 und nativeint . Die gleiche Frage sollte sich stellen: "Welches verwende ich?". Wie andere bereits erwähnt haben, sollte es in den meisten Fällen keine Rolle spielen (sollte transparent sein). Aber ich würde int32 und uint32 wählen, nur um die Mehrdeutigkeiten zu beseitigen.

Ich denke, es hängt nur davon ab, welche Anwendungen Sie codieren, wer sie verwendet, welche Codierungspraktiken Sie und Ihr Team befolgen usw., um zu rechtfertigen, wann Int32 verwendet werden soll.


Macht das nicht den Zweck von .net ungültig? Was ist F # überhaupt, eine Idee, die Gates hatte und die mit seiner Pensionierung verschwand ...
Nick Turner

8

Es gibt keinen Unterschied zwischen intund Int32, aber wie intein Sprachschlüsselwort bevorzugen viele Leute es stilistisch (genau wie bei stringvs String).


7

Nach meiner Erfahrung war es eine Konventionssache. Mir ist kein technischer Grund bekannt, int über Int32 zu verwenden, aber es ist:

  1. Schneller zu tippen.
  2. Dem typischen C # -Entwickler besser bekannt.
  3. Eine andere Farbe in der Standard-Visual Studio-Syntaxhervorhebung.

Ich mag diesen letzten besonders gern. :) :)


7

Ich verwende beim Definieren einer Variablen immer die Alias-Typen (int, string usw.) und beim Zugriff auf eine statische Methode den echten Namen:

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

Es scheint nur hässlich, so etwas wie int.TryParse () zu sehen. Es gibt keinen anderen Grund, warum ich das mache als Stil.


5

Ich weiß, dass die beste Vorgehensweise darin besteht, int zu verwenden, und der gesamte MSDN-Code verwendet int. Soweit ich weiß, gibt es jedoch keinen Grund, der über Standardisierung und Konsistenz hinausgeht.


5

Obwohl sie (meistens) identisch sind (siehe unten für den einen [Fehler] Unterschied), sollten Sie sich auf jeden Fall darum kümmern und Int32 verwenden.

  • Der Name für eine 16-Bit-Ganzzahl lautet Int16. Für eine 64-Bit-Ganzzahl ist es Int64, und für eine 32-Bit-Ganzzahl ist die intuitive Wahl: int oder Int32?

  • Die Frage nach der Größe einer Variablen vom Typ Int16, Int32 oder Int64 ist selbstreferenzierend, aber die Frage nach der Größe einer Variablen vom Typ int ist eine vollkommen gültige Frage, und Fragen, egal wie trivial, lenken ab zu Verwirrung, Zeitverschwendung, Behinderung der Diskussion usw. (die Tatsache, dass diese Frage existiert, beweist den Punkt).

  • Die Verwendung von Int32 fördert, dass sich der Entwickler der Wahl des Typs bewusst ist. Wie groß ist ein Int wieder? Oh ja, 32. Die Wahrscheinlichkeit, dass die Größe des Typs tatsächlich berücksichtigt wird, ist größer, wenn die Größe im Namen enthalten ist. Die Verwendung von Int32 fördert auch das Wissen über die anderen Auswahlmöglichkeiten. Wenn die Leute nicht gezwungen sind, zumindest zu erkennen, dass es Alternativen gibt, wird es für int viel zu einfach, "DER ganzzahlige Typ" zu werden.

  • Die Klasse innerhalb des Frameworks, die mit 32-Bit-Ganzzahlen interagieren soll, heißt Int32. Noch einmal: Was ist intuitiver, weniger verwirrend, es fehlt eine (unnötige) Übersetzung (keine Übersetzung im System, sondern im Kopf des Entwicklers) usw. int lMax = Int32.MaxValueoder Int32 lMax = Int32.MaxValue?

  • int ist nicht in allen .NET-Sprachen ein Schlüsselwort.

  • Obwohl es Argumente gibt, warum es sich wahrscheinlich nie ändern wird, ist int möglicherweise nicht immer ein Int32.

Die Nachteile sind zwei zusätzliche Zeichen und [Fehler].

Dies wird nicht kompiliert

public enum MyEnum : Int32
{
    AEnum = 0
}

Aber das wird:

public enum MyEnum : int
{
    AEnum = 0
}

Sie sagen "Der Name für eine 16-Bit-Ganzzahl ist Int16, für eine 64-Bit-Ganzzahl ist es Int64, und für eine 32-Bit-Ganzzahl lautet die intuitive Wahl: int oder Int32?", Aber es gibt auch C # -Schlüsselwörter für diese. Int16 = kurz Int64 = lang Punkt 1 Ihrer Antwort basiert also auf einer falschen Annahme.
Mel

"Variable vom Typ int ist eine vollkommen gültige Frage, und Fragen, egal wie trivial sie sind, lenken ab, führen zu Verwirrung, Zeitverschwendung, behindern die Diskussion usw. (die Tatsache, dass diese Frage existiert, beweist den Punkt)." Willst du mich veräppeln? Sie arbeiten in einer Sprache, die Sie nicht vollständig verstehen, was sich hinter der Haube verbirgt. Wenn der Entwickler nicht versteht, was der primitive Typ bedeutet, sollte er sich mit der Kochkunst befassen. Klingt nach einem VB-Entwickler. Die Verwendung von Grundelementen ist in jeder Sprache muttersprachlich und sollte bevorzugt werden. Es ist in Ordnung, wenn Sie keine Primitiven mögen, aber keine Realitäten erfinden.
Nick Turner

Hmm, ich bin völlig anderer Meinung als Ihre Meinung, dass es mich interessieren sollte ... aber ich wusste nicht, dass Aufzählungen nur von den Schlüsselwörtern erben können. Eine ziemlich nutzlose Tatsache, aber trotzdem lustig zu wissen :)
Jowen

4

Es sollte dich nicht interessieren. Sie sollten die intmeiste Zeit verwenden. Es wird Ihnen helfen, Ihr Programm in Zukunft auf eine breitere Architektur zu portieren (derzeit intist dies ein Alias ​​für, System.Int32aber das könnte sich ändern). Nur wenn die Bitbreite der Variablen von Bedeutung ist (zum Beispiel: um das Layout im Speicher von a zu steuern struct), sollten Sie int32und andere (mit dem zugehörigen " using System;") verwenden.


1
Sie können es nicht ernst meinen ... die Portierung einfacher machen? Ich denke nicht, dass ein Finden und Ersetzen eine große Sache ist.
Vince Panuccio

2
(derzeit int ist ein Alias für System.Int32 aber das ändern könnte) ? Oh komm eins ... Ist das dein Ernst?
Oybek

Warum sollten Sie Code in einer Sprache schreiben, die Sie eventuell in den Papierkorb werfen möchten? Scheint wie durch Managemententscheidung. Verwenden Sie int oder Int32. Int32 sieht aus wie VB
Nick Turner

Was ich damit gemeint habe war, dass MAYBE (und das ist ein großer MAYBE, ich weiß nicht wirklich, warum die Designer es so gemacht haben) Sie eine Möglichkeit haben sollten, ein Int zu deklarieren, das die gleiche Breite hat wie der Bogen, auf dem Sie laufen. wie Cs int / long / ... funktioniert. Dies ist ein Mechanismus (int bis alias int32), der genau dafür ausgelegt zu sein scheint. Und berücksichtigen Sie, dass Microsoft immer die Verwendung von "int" gegenüber "Int32" empfiehlt (genau wie dies der Fall wäre, wenn dies ihre ursprüngliche Absicht wäre). Ich weiß, das ist eine große WENN ... Als ich diese Antwort schrieb, gab es kein 64-Bit-.NET-Framework, also wusste ich nicht, was sie in diesem Fall tun würden.
Yanko Hernández Alvarez

3

int ist die Verknüpfung der C # -Sprache für System.Int32

Während dies bedeutet, dass Microsoft diese Zuordnung ändern könnte, heißt es in einem Beitrag in den Diskussionen von FogCreek [Quelle]

"Zum 64-Bit-Problem - Microsoft arbeitet zwar an einer 64-Bit-Version von .NET Framework, aber ich bin mir ziemlich sicher, dass int auf diesem System NICHT 64-Bit zugeordnet werden kann.

Gründe dafür:

1. Der C # ECMA-Standard besagt ausdrücklich, dass int 32 Bit und long 64 Bit ist.

2. Microsoft hat in Framework Version 1.1 zusätzliche Eigenschaften und Methoden eingeführt, die lange Werte anstelle von int-Werten zurückgeben, z. B. Array.GetLongLength zusätzlich zu Array.GetLength.

Ich kann also mit Sicherheit sagen, dass alle integrierten C # -Typen ihre aktuelle Zuordnung beibehalten. "


Wenn eine 64-Bit-Version eingeführt wird, werden sie wahrscheinlich 'nativeint' zu C # hinzufügen (wie es derzeit in F # verwendet wird). Dies bestätigt nur, dass die Einführung des 'int' und die Definition als 'Int32' ein Fehler war! Und so inkonsistent vom Standpunkt der API (dh ReadInt32 nicht ReadInt), Farbe (dunkel gegen hellblau) und Groß- und Kleinschreibung (DateTime gegen int). dh warum hat der Werttyp 'DateTime' keinen Alias ​​wie Int32?
Carlo Bos

3

int ist dasselbe wie System.Int32 und wenn es kompiliert wird, wird es in CIL dasselbe .

Wir verwenden int gemäß Konvention in C #, da C # wie C und C ++ (und Java) aussehen möchte und das ist, was wir dort verwenden ...

Übrigens verwende ich am Ende System.Int32, wenn ich Importe verschiedener Windows-API-Funktionen deklariere. Ich bin nicht sicher, ob dies eine definierte Konvention ist oder nicht, aber es erinnert mich daran, dass ich zu einer externen DLL gehe ...


3

Es war einmal, dass der Datentyp int an die Registergröße des Computers gebunden war, auf den der Compiler abzielte. So würde beispielsweise ein Compiler für ein 16-Bit-System eine 16-Bit-Ganzzahl verwenden.

Zum Glück sehen wir jedoch nicht mehr viel 16-Bit, und als 64-Bit populär wurde, waren die Leute mehr daran interessiert, es mit älterer Software kompatibel zu machen, und 32-Bit gab es schon so lange, dass für die meisten Compiler ein Int wird nur als 32 Bit angenommen.


3

Ich würde empfehlen, Microsoft StyleCop zu verwenden .

Es ist wie bei FxCop , jedoch für stilbezogene Probleme. Die Standardkonfiguration entspricht den internen Styleguides von Microsoft, kann jedoch für Ihr Projekt angepasst werden.

Es kann etwas gewöhnungsbedürftig sein, aber es macht Ihren Code definitiv schöner.

Sie können es in Ihren Erstellungsprozess aufnehmen, um automatisch nach Verstößen zu suchen.


Ich bin mit StyleCop in diesem Punkt überhaupt nicht einverstanden. Ja, es ist gut, aber ich bevorzuge Int32. Warum? um Antworten wie die beiden herabgestuften zu vermeiden. Die Leute verwechseln Int32 mit der Darstellung von Ints in C
John Demetriou

2

intund Int32ist das gleiche. intist ein Alias ​​für Int32.


int ist kein Alias, sondern ein Schlüsselwort. Siehe die anderen Antworten.
Timores

int ist definitiv ein Schlüsselwort für die Sprache, kann aber auch als Alias ​​von System.Int32 bezeichnet werden. Eine andere Möglichkeit, dies zu betrachten, besteht darin, dass Sie eine using int = System.Int32; Direktive für alle Ihre Quellcodedateien haben.
Uygar Donduran

2

Es sollte dir egal sein. Wenn Größe ein Problem ist, würde ich Byte verwenden, kurz, int, dann lang. Der einzige Grund, warum Sie ein int größer als int32 verwenden würden, ist, wenn Sie eine Zahl höher als 2147483647 oder niedriger als -2147483648 benötigen.

Abgesehen davon wäre es mir egal, es gibt viele andere Dinge, mit denen ich mich befassen muss.


Ich würde hinzufügen, dass Sie das Schlüsselwort "long" anstelle von System.Int64
Keith

22
Sie haben die Frage falsch verstanden. Das OP fragt, ob es einen Unterschied zwischen den Deklarationen "int i" und "Int32 i" gibt.
Rabe

2

In der Praxis macht es keinen Unterschied, und mit der Zeit werden Sie Ihre eigene Konvention verabschieden. Ich neige dazu, das Schlüsselwort beim Zuweisen eines Typs und die Klassenversion bei der Verwendung statischer Methoden und dergleichen zu verwenden:

int total = Int32.Parse("1009");


1

Ich verwende int für den Fall, dass Microsoft die Standardimplementierung für eine Ganzzahl in eine neue Version mit Reißzwecken ändert (nennen wir es Int32b).

Microsoft kann dann den int-Alias ​​in Int32b ändern, und ich muss keinen meiner Codes ändern, um die neue (und hoffentlich verbesserte) Ganzzahlimplementierung nutzen zu können.

Gleiches gilt für alle Schlüsselwörter.


0

Sie sollten sich in den meisten Programmiersprachen nicht darum kümmern, es sei denn, Sie müssen sehr spezifische mathematische Funktionen oder Code schreiben, der für eine bestimmte Architektur optimiert ist ... Stellen Sie einfach sicher, dass die Größe des Typs für Sie ausreicht (verwenden Sie etwas Größeres als ein Int, wenn Sie dies tun weiß, dass Sie zum Beispiel mehr als 32 Bit benötigen)


0

Es spielt keine Rolle. int ist das Sprachschlüsselwort und Int32 der tatsächliche Systemtyp.

Siehe auch meine Antwort hier auf eine verwandte Frage.


0

Die Verwendung von Int oder Int32 ist dasselbe. Int ist nur Zucker, um den Code für den Leser zu vereinfachen.

Verwenden Sie die Nullable-Variante Int? oder Int32? Wenn Sie mit Datenbanken an Feldern arbeiten, die null enthalten. Das erspart Ihnen viele Laufzeitprobleme.


0

Einige Compiler haben unterschiedliche Größen für int auf verschiedenen Plattformen (nicht C # -spezifisch).

Einige Codierungsstandards (MISRA C) erfordern, dass alle verwendeten Typen die angegebene Größe haben (dh Int32 und nicht int).

Es ist auch gut, Präfixe für verschiedene Typvariablen anzugeben (z. B. b für 8-Bit-Byte, w für 16-Bit-Wort und l für 32-Bit-langes Wort => Int32 lMyVariable).

Sie sollten sich darum kümmern, da Ihr Code dadurch portabler und wartbarer wird.

Portable ist möglicherweise nicht auf C # anwendbar, wenn Sie immer C # verwenden und die C # -Spezifikation diesbezüglich niemals geändert wird.

Das wartbare ihmo ist immer anwendbar, da die Person, die Ihren Code verwaltet, diese bestimmte C # -Spezifikation möglicherweise nicht kennt und einen Fehler verpasst, wenn der Int gelegentlich mehr als 2147483647 beträgt.

In einer einfachen for-Schleife, die zum Beispiel die Monate des Jahres zählt, ist es Ihnen egal, aber wenn Sie die Variable in einem Kontext verwenden, in dem sie möglicherweise fließen könnte, sollten Sie sich darum kümmern.

Sie sollten sich auch darum kümmern, ob Sie bitweise Operationen daran durchführen.


Es macht keinen Unterschied in .Net - int ist immer Int32 und long ist immer Int64
Keith

It is also good to specify prefixes for different type variablesDie ungarische Notation ist heutzutage weitgehend veraltet und die meisten Codierungsstile raten von ihrer Verwendung ab. Interne Konventionen von Softwareunternehmen verbieten diese Notation ebenfalls häufig
phuclv

0

Die Verwendung des Int32Typs erfordert einen Namespace-Verweis auf Systemoder eine vollständige Qualifizierung ( System.Int32). Ich tendiere dazu int, weil es keinen Namespace-Import erfordert, wodurch die Wahrscheinlichkeit einer Namespace-Kollision in einigen Fällen verringert wird. Bei der Kompilierung zu IL gibt es keinen Unterschied zwischen den beiden.


0

Laut dem Direktfenster in Visual Studio 2012 ist Int32 int, Int64 ist lang. Hier ist die Ausgabe:

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

Beachten Sie auch Int16. Wenn Sie eine Ganzzahl im Speicher Ihrer Anwendung speichern müssen und sich Sorgen über die verwendete Speichermenge machen, können Sie sich für Int16 entscheiden, da es weniger Speicher benötigt und einen kleineren Min / Max-Bereich als Int32 hat (was int ist) .)


0

Vor einiger Zeit arbeitete ich mit Microsoft an einem Projekt, als wir jemanden aus dem Microsoft .NET CLR-Produktteam besuchten. Diese Person codierte Beispiele und als sie seine Variablen definierte, verwendete sie "Int32" vs. "int" und "String" vs. "string".

Ich hatte mich daran erinnert, diesen Stil in einem anderen Beispielcode von Microsoft gesehen zu haben. Also habe ich einige Nachforschungen angestellt und festgestellt, dass jeder sagt, dass es keinen Unterschied zwischen "Int32" und "int" gibt, außer bei der Syntaxfärbung. Tatsächlich habe ich viel Material gefunden, das darauf hindeutet, dass Sie "Int32" verwenden, um Ihren Code besser lesbar zu machen. Also habe ich den Stil übernommen.

Neulich habe ich einen Unterschied gefunden! Der Compiler erlaubt Ihnen nicht, enum mit "Int32" einzugeben, aber wenn Sie "int" verwenden. Frag mich nicht warum, weil ich es noch nicht weiß.

Beispiel:

public  enum MyEnum : Int32
{
    AEnum = 0
}

Das funktioniert.

public enum MyEnum : int
{
    AEnum = 0
}

Entnommen aus: Int32-Notation vs. int

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.