376 Stimmen

Soll ich int oder Int32 verwenden?

In C#, int y Int32 sind das Gleiche, aber ich habe schon mehrmals gelesen, dass int ist vorzuziehen gegenüber Int32 ohne Angabe von Gründen. Gibt es einen Grund, und sollte mich das interessieren?

6voto

Obwohl sie (größtenteils) identisch sind (siehe unten für den einen [Fehler] Unterschied), sollten Sie auf jeden Fall darauf achten und Int32 verwenden.

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

  • Die Frage nach der Größe einer Variablen des Typs Int16, Int32 oder Int64 ist selbstreferenzierend, aber die Frage nach der Größe einer Variablen des Typs int ist eine völlig berechtigte Frage, und Fragen, egal wie trivial sie sind, lenken ab, führen zu Verwirrung, verschwenden Zeit, behindern die Diskussion usw. (die Tatsache, dass es diese Frage gibt, beweist den Punkt).

  • Die Verwendung von Int32 zeigt, dass sich der Entwickler seiner Wahl des Typs bewusst ist. Wie groß ist ein int noch mal? Ach ja, 32. Die Wahrscheinlichkeit, dass die Größe des Typs tatsächlich in Betracht gezogen wird, ist größer, wenn die Größe im Namen enthalten ist. Die Verwendung von Int32 fördert auch das Wissen um die anderen Möglichkeiten. Wenn die Leute nicht dazu gezwungen werden, zumindest zu erkennen, dass es Alternativen gibt, wird es viel zu leicht, dass int "DER Integer-Typ" wird.

  • Die Klasse innerhalb des Frameworks, die für die Interaktion mit 32-Bit-Ganzzahlen vorgesehen ist, heißt Int32. Noch einmal, was ist: intuitiver, weniger verwirrend, keine (unnötige) Übersetzung (keine Übersetzung im System, sondern im Kopf des Entwicklers), usw. int lMax = Int32.MaxValue o Int32 lMax = Int32.MaxValue ?

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

  • Obwohl es Argumente gibt, warum sich dies wahrscheinlich nie ändern wird, muss int nicht immer ein Int32 sein.

Die Nachteile sind zwei zusätzliche Zeichen, die eingegeben werden müssen, und [bug].

Das lässt sich nicht kompilieren

public enum MyEnum : Int32
{
    AEnum = 0
}

Aber das wird es:

public enum MyEnum : int
{
    AEnum = 0
}

5voto

Raithlin Punkte 1774

Ich weiß, dass die beste Praxis ist, int zu verwenden, und alle MSDN-Code verwendet int. Es gibt jedoch keinen Grund, der über Standardisierung und Konsistenz hinausgeht, soweit ich weiß.

4voto

yhdezalvarez Punkte 71

Das sollte Ihnen egal sein. Sie sollten verwenden int die meiste Zeit. Es wird die Portierung Ihres Programms auf eine breitere Architektur in der Zukunft erleichtern (derzeit int ist ein Alias für System.Int32 aber das könnte sich ändern). Nur wenn die Bitbreite der Variablen von Bedeutung ist (z. B. zur Steuerung des Layouts im Speicher einer struct ) sollten Sie verwenden int32 und andere (mit dem zugehörigen " using System; ").

3voto

Joel Coehoorn Punkte 377088

Früher war der Datentyp int an die Registergröße der vom Compiler anvisierten Maschine gekoppelt. So würde beispielsweise ein Compiler für ein 16-Bit-System eine 16-Bit-Ganzzahl verwenden.

Allerdings sehen wir zum Glück nicht mehr viel 16-Bit, und als 64-Bit populär wurde, waren die Leute mehr damit beschäftigt, es mit älterer Software kompatibel zu machen, und 32-Bit gab es schon so lange, dass für die meisten Compiler ein int wird einfach als 32 Bit angenommen.

3voto

Ray Hayes Punkte 14625

Int ist die Abkürzung der Sprache C# für System.Int32

Dies bedeutet zwar, dass Microsoft diese Zuordnung ändern könnte, aber in einem Diskussionsbeitrag von FogCreek heißt es [Quelle]

"Was das 64-Bit-Problem angeht - Microsoft arbeitet tatsächlich an einer 64-Bit-Version des .NET Framework, aber ich bin mir ziemlich sicher, dass int auf diesem System NICHT auf 64 Bit abgebildet wird.

Die Gründe:

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

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

Daher denke ich, dass man mit Sicherheit sagen kann, dass alle eingebauten C#-Typen ihr aktuelles Mapping behalten werden."

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X