int vs System.Int32
-
Hallo,
wenn ich einen int mit Type.GetName() nach seinem Namen frage, dann nennt er sich Int32 (oder GetFullName => System.Int32).
In dem von mir generierten Code wird aber gewünscht, dass int auftaucht...gibt es eine Schnittstelle, die ich fragen kann, was System.Int32 als Schlüsselwort ist (oder wenigstens den umgekehrten Weg) oder muss ich mir ein Mapping bauen?
-
Warum musst du das machen?System.Int32 und int sind ein und das selbe ist also egal was du da nimmst.
-
Hi,
Firefighter schrieb:
Warum musst du das machen?
Nur weil das einer der C#-Guru-Freelancer so will und ich als C++-ler keine Stimme habe...
System.Int32 und int sind ein und das selbe ist also egal was du da nimmst.
Das hatte ich auch von diversen Quellen gelesen, war mir aber nicht sicher.
Es ist also richtig, dass int bei .NET immer ein System.Int32 ist? Also ein unveränderlicher Alias, der bei jeder Platform gleich ist?! Und auch gleich bleibt (z.B. bei einer 256-Bit Hardware mit Window 13.11)?
-
void* schrieb:
System.Int32 und int sind ein und das selbe ist also egal was du da nimmst.
Das hatte ich auch von diversen Quellen gelesen, war mir aber nicht sicher.
Ich würde der MSDN vertrauen:
Tabelle integrierter Typen (Zitat: int - System.Int32)
int (C#-Referenz) (Zitat: 32-Bit-Ganzzahl mit Vorzeichen)
-
void* schrieb:
Es ist also richtig, dass int bei .NET immer ein System.Int32 ist?
Für .Net ist ein Int32 immer ein Int32. int als Datentyp gehört ja zu C#. Die Frage müsste also heißen ob int in C# immer dem Int32 entsprechen wird, und dazu ist die Antwort ja. Das erklärt übrigens auch wieso du kein int sondern Int32 zurückbekommst. int ist alleinig der Datentypname in C#. In anderen Sprachen muss er nicht int heißen.
Sag also dem C#-Guru-Freelancer das er akzeptieren muss das C# nur eine von vielen .Net Sprachen ist
Aber in deinem Fall, wenn du C# Code generierst, dann würde ich aber auch lieber wollen das dort int steht. Sonst sieht des einfach ein Stück weniger nach C# aus.
-
void* schrieb:
Nur weil das einer der C#-Guru-Freelancer so will und ich als C++-ler keine Stimme habe...
lass mich raten ... sein Müll läuft nicht und Du sollst es ausbaden?
-
Ein int ist nichts anderes, als ein System.Int32. In .NET sind alle Datentypen festgelegt, weil es für .NET unzählige Programmiersprachen gibt.
Die Konvention int oder string hat man im Sprachstandard nur eingeführt, um den C++ Programmierern entgegen zu kommen.
Es gibt einen ganzen Haufen Entwickler, die greifen im Programm nur direkt auf die Datentypen Int32 etc, zurück, weil das den Vorteil hat das es 100% eindeutig ist.
-
AmunRa schrieb:
Es gibt einen ganzen Haufen Entwickler, die greifen im Programm nur direkt auf die Datentypen Int32 etc, zurück, weil das den Vorteil hat das es 100% eindeutig ist.
"int" ist auch 100% eindeutig
es ist bloss weniger "verbose". was ich persönlich gut finde, worüber man aber natürlich streiten kann.@void*:
void* schrieb:
Es ist also richtig, dass int bei .NET immer ein System.Int32 ist? Also ein unveränderlicher Alias, der bei jeder Platform gleich ist?! Und auch gleich bleibt (z.B. bei einer 256-Bit Hardware mit Window 13.11)?
Vermutlich ist es, wenn man sich die offiziellen Standarddokumente ansieht, alles etwas komplizierter. Aber im Prinzip, ja: "int" ist ein Alias für "System.Int32", einfach eine andere Schreibweise.
Und ja, unveränderlich. Der C# Sprachstandard sagt, genau wie z.B. der Java Standard auch, dass "int" immer genau 32 Bit gross ist.
Das ist ja gerade das feine an C#, dass man - im Gegensatz zu C oder C++ - nicht damit rechnen muss, dass irgendwas irgendwann mal grösser/kleiner sein wird.Natürlich ist das auch gleichzeitig etwas lästig, da im .NET Framework viel mit "int" gemacht wird, wo man vielleicht doch mal die 2/4 GB Grenze überschreiten könnte. Auf neuen CPUs, die vielleicht grössere Register hätten, bleibt "int" dann trotzdem 32 Bit, und das Programm kann nicht "automatisch" grössere/mehr Daten verarbeiten.
Andrerseits wurden Klassen wie System.Array darauf vorbereitet grössere Datenmengen zu unterstützen, z.B. indem zusätzlich zur "int Length" eine "long LongLength" Property angeboten wird.
-
Guten Morgen!
Erst mal vielen Dank für die all die Antworten.
mogel schrieb:
void* schrieb:
Nur weil das einer der C#-Guru-Freelancer so will und ich als C++-ler keine Stimme habe...
lass mich raten ... sein Müll läuft nicht und Du sollst es ausbaden?
Nicht ganz...da hier gerade für ein neues Projekt C# eingeführt wird, hat man beschlossen, für ein paar Monate einen C#-Guru zum Team dazu zu packen. Und jetzt vermittelt er eben seine Ansichten von "richtigem" C#. Und da ich erst seit 2 Wochen mit C# am Start bin, fällt es mir noch schwer Details richtig einzuordnen. Wobei man ehrlicherweise sagen muss, dass das Meiste, dass er sagt ganz stimmig ist. Aber abwarten...
Und jetzt bastele ich eben einen Generator für seine Service-Schnittstelle (nach seinen Anforderungen).Mein Zwischenfazit:
1. int entspricht im wesentlichen System.Int32, wobei es syntaktische Feinheiten gibt (int ist ein Schlüsselwort, für Int32 braucht man System...).
2. Nach der reinen C#-Lehre ist es (nur aus ästhetisch Gründen!) schöner int anstatt System.Int32 und string anstatt String usw. zu verwenden.Jetzt aber nochmal zurück zu meiner ursprünglichen Frage:
Gibt es einen vorgefertigten Weg vom C#- zum .Net-Typ oder müsste ich mir ein eigenes Mapping bauen (egal, ob das jetzt besonders sinnig ist oder nicht), z.B. aus der Tabelle aus ascs Link?
-
in dem zusammenhang faellt mir immer wieder auf das sehr viele
"string bla = "bla";" schreiben aber dann immer
"String.Parse(var);" verwendenich persoenlich schreibe immer das alias
"string bla = "bla";"
"string.Parse(var);"
allein schon wegden der syntax highlighting #ggum zum thema zurueck zu kommen
ich denke nicht das es ein fertigen weg gibt um an den string "int" zu kommen vom typen Int32 - da es zur laufzeit einfach kein "int" mehr gibt
entweder dein guru lebt damit (ein c# guru der nicht Int32 lesen will?) oder du schaltest immer ein eigenes mapping dazwischen wenn es um die ausgabe des types geht
short = Int16
int = Int32
long = Int64
double = Double
string = String
void = Void
bool = Boolean
mit uint, float usw gabs auch was - kenn die .net typen dafuer aber grad nicht
-
void* schrieb:
Nicht ganz...da hier gerade für ein neues Projekt C# eingeführt wird, hat man beschlossen, für ein paar Monate einen C#-Guru zum Team dazu zu packen. Und jetzt vermittelt er eben seine Ansichten von "richtigem" C#.
der soll Euch C# bei bringen und nicht als Evangelist auftreten wie ER es für richtig hält
Gibt es einen vorgefertigten Weg vom C#- zum .Net-Typ oder müsste ich mir ein eigenes Mapping bauen (egal, ob das jetzt besonders sinnig ist oder nicht), z.B. aus der Tabelle aus ascs Link?
bau eine kleines Projekt mit einer Klasse ... darin sind 2 Funktionen ... die Parameter einmal als int und einmal als Int32 ... kompilieren und in Reflector reinziehen ... da dürfte dann 2 mal Int32 stehen ... also ist seine Diskussion fehl am Platz und zeigt das er nur seine kleine Welt für Richtig hält -> Fachidiot
-
Mr Evil schrieb:
in dem zusammenhang faellt mir immer wieder auf das sehr viele
"string bla = "bla";" schreiben aber dann immer
"String.Parse(var);" verwendenSchreibe ich auch immer so, da ich "string" als Datentyp ansehe und "String" als Klasse (d.h. für den Aufruf von statischen Methoden). Und auch "String" als Klasse wird vom VS ge'highlighted'.
("string.Parse(var)" empfinde ich als unpassend, da es gerade vom VS als Schlüsselwort angezeigt wird, obwohl dort keine Anweisung ausgeführt wird, wie bei "if", "while" oder "return" - und ich ändere es auch bei Code ab, der mir in die Hände fällt -)
-
Mr Evil schrieb:
ich denke nicht das es ein fertigen weg gibt um an den string "int" zu kommen vom typen Int32 - da es zur laufzeit einfach kein "int" mehr gibt
Ok, das habe ich mir schon fast gedacht, nach dem Rest der Diskussion. Thx. Also bau ich mir ein eigenes Mapping, wenn er darauf (be-)steht
.
Mr Evil schrieb:
entweder dein guru lebt damit
Ich hab ihn doch gar nicht ausgesucht...
Mr Evil schrieb:
(ein c# guru der nicht Int32 lesen will?)
Scheint so...
mogel schrieb:
der soll Euch C# bei bringen und nicht als Evangelist auftreten wie ER es für richtig hält
Dich lade ich mal hier her ein. Gibt auch Zopf gratis!
mogel schrieb:
bau eine kleines Projekt mit einer Klasse ... darin sind 2 Funktionen ... die Parameter einmal als int und einmal als Int32 ... kompilieren und in Reflector reinziehen ... da dürfte dann 2 mal Int32 stehen ... also ist seine Diskussion fehl am Platz und zeigt das er nur seine kleine Welt für Richtig hält -> Fachidiot
Sollte ich mal machen. Allerdings sollte ich zusätzlich einmal als x64 und einmal als x86 kompilieren, dann sieht man das es wirklich wurscht ist.
Nochmals Danke Euch allen!
-
void* schrieb:
2. Nach der reinen C#-Lehre ist es (nur aus ästhetisch Gründen!) schöner int anstatt System.Int32 und string anstatt String usw. zu verwenden.
Das ist spätestens dann Unsinn, wenn es um Reflection geht.
Das System sagt dann das Ding heisst "Int32", und damit erübrigt sich IMO jegliche Diskussion. Mapper zu basteln die das immer abändern halte ich für wenig Sinnvoll.Eine Ausnahme die mir einfällt wäre IMO wenn man einen Doku-Generator oder Logausgaben etc. mit Funktions-Prototypen füttern will. Da würde ich auch "int" vorziehen - ist halt doof wenn in der Doku überall "Int32" steht, und im Programm überall "int".
-
hustbaer schrieb:
"int" ist auch 100% eindeutig
es ist bloss weniger "verbose". was ich persönlich gut finde, worüber man aber natürlich streiten kann.Nö, ist es nicht!
int ist eine Abbildung von primitiven Datentypen auf die Typen der FCL. System.Int32 ist der direkte Aufruf der FCL-Typen. long wird int C# auf Int64 abgebildet, in C++/CLI allerdings auf Int32.
Beim Aufruf der FCL-Typen werden automatisch alle Missverständnisse aus dem Weg geräumt.
-
AmunRa schrieb:
hustbaer schrieb:
"int" ist auch 100% eindeutig
es ist bloss weniger "verbose". was ich persönlich gut finde, worüber man aber natürlich streiten kann.Nö, ist es nicht!
int ist eine Abbildung von primitiven Datentypen auf die Typen der FCL. System.Int32 ist der direkte Aufruf der FCL-Typen. long wird int C# auf Int64 abgebildet, in C++/CLI allerdings auf Int32.
Beim Aufruf der FCL-Typen werden automatisch alle Missverständnisse aus dem Weg geräumt.
Ja, laber.
Es geht hier um C#, und "C#" + "int" = eindeutig. Anders gesagt: wenn ich in einem C# Programm ein "int" stehen habe, dann ist das eindeutig.Klar jetzt?
-
hustbaer schrieb:
Klar jetzt?
Sir, yes, sir.
-
hustbaer schrieb:
Ja, laber.
Es geht hier um C#, und "C#" + "int" = eindeutig. Anders gesagt: wenn ich in einem C# Programm ein "int" stehen habe, dann ist das eindeutig.Klar jetzt?
Du solltest mal an Deinen Ausdrücken arbeiten Du Spinner.
Das war ein Beispiel, bloß nicht mal über den Tellerrand gucken.Hustbaer Du bist mit Abstand der größte Idiot hier im Forum.
Und viel Ahnung hast Du nicht.
Hast Du überhaupt schon einen PC, oder hast Du noch immer Deinen C64? Du Vollspacken...
-
Fettbemme schrieb:
...
aha
-
hustbaer schrieb:
Ja, laber.
Es geht hier um C#, und "C#" + "int" = eindeutig. Anders gesagt: wenn ich in einem C# Programm ein "int" stehen habe, dann ist das eindeutig.Du hast keine Ahnung wovon du redest. Ich empfehle dir das Buch "Programmierung in C# - Expertenwissen zur CLR und dem .NET-Framework" von Jeffrey Richter.
Dort wird dir das noch einmal genauer erklärt, was ich oben bereits angedeutet habe. Solltest du unbedingt einmal lesen, damit du in Zukunft nicht soviel Unsinn verbreitest!