Was ist der Grund für die Angabe einer Enum als "uint"?
Stieß ich auf einige Enumeratoren, dass die übernommenen uint
. Ich konnte nicht herausfinden, warum jemand würde dies tun.
Beispiel:
Enum myEnum : uint
{
...
}
Keinen Vorteil oder besonderen Grund, jemand würde dies tun? Warum nicht einfach lassen, wie es defaultint?
InformationsquelleAutor | 2009-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem Grund, der mir einfällt, ist, dass die Reichweitenkontrolle ist einfacher. Da die meisten Aufzählungen beginnen bei 0, würde man nur noch die Obere Schranke.
InformationsquelleAutor Hans Passant
wenn die enumeration-Werte größer als 2.147.483.647 und nicht-negativ.
Was ist mit den Werten, nur sollte nicht negativ sein?
Sorry, habe eine harte Zeit, herauszufinden, was Sie bedeuten, können Sie eine Wiederholung der Frage?
Ich habe nicht downvote, aber es gibt nur einen Fall, den ich mir vorstellen kann, wo dies gelten würde... Wenn Sie mit einer flags-enum, das zu vertreten hat genau 32 verschiedene Boolesche Werte... Dann mag es Sinn machen, verwenden Sie ein "uint" zu vermeiden, der Wechsel zu lange... Aber noch eine weitere, 33, und Sie müssen eine lange sowieso.
Ich könnte Zustimmen, dass in den meisten Fällen, aber wenn mit einem 3rd-party POS-system, Sie hatten über 2200 flags gespeichert in einer einzigen Datei in 32 bit-Blöcken für eine schnellere Indexierung. So uint verwendet, um die Werte zu speichern.
InformationsquelleAutor Tom Anderson
Ich denke, es ist getan worden, um es zu ermöglichen, werden automatisch gegossen, um einen uint-Wert (in C, Enumerationen behandelt wurden als Ganzzahlen vom Typ system). Womöglich erlauben bitweise Veroderung von flag-Werte für die Enumeration. sehen http://www.velocityreviews.com/forums/t286596-enums-in-c-and-c.html
InformationsquelleAutor Jesse Pepper
Ist es bequem und absolut notwendig in einigen Fällen, wenn die Arbeit mit COM-Interop /P/Invoke von .NET. Zum Beispiel, werden Sie sicherlich einige finden, bei pinvoke.net auf diese Weise definiert. In einigen Fällen ist es nur Karten näher an die zugrunde liegende API-definition, aber es ist nicht notwendig, aber in einigen Fällen kann die zugrunde liegende API-vielleicht auch ein paar von diesen high-bits für flags und es wird erforderlich sein, "UINT".
Außerhalb der Interop, Sie könnte verwenden einige sehr hohe bits als flags auch nur in normalem C#/VB.NET und könnte auch verlangen, "uint".
InformationsquelleAutor Scott Willeke
Ich die Umwandlung einige messaging-code, der ursprünglich in C geschrieben in C#.
Einige Felder in der C-Codes haben eine begrenzte Menge der möglichen Werte definiert als eine verbundene Gruppe von #definiert. In anderen Worten eine Aufzählung.
Beim konvertieren einige dieser Aufzählungen, einige Werte sind zu groß für einen integer, z.B.
#define NONE 0x00000000
#define WERT1 0x00000001
...
#define VALX 0x80000000
Hier, VALX nicht akzeptabel sein, um eine Standard-enum in C#, also das enum muss gewirkt werden, als uint, das ist auch die Art der Speicherung von Variablen in den Datensatz-Struktur.
InformationsquelleAutor Mathew Bollington
Dem Beispiel, das ich spreche, ist der code hier:
http://www.codeplex.com/FacebookNET
Werfen Sie einen Blick auf die Klasse FacebookResponseStatus.cs
Konnte ich den Autor E-Mail, aber ich dachte nicht zu stören und nur zu sehen, was die Leute denken, in der Allgemeinen Gemeinschaft, basierend auf anderen Erfahrungen.
Ich bin nicht mit diesem framework auf CodePlex, aber war die überprüfung, um zu sehen, wie andere waren, Implementierung von Facebook in .NET. Ich dachte nur, es war interessant und wollte wissen, warum das : uint für Enumerationen, die es gibt.
InformationsquelleAutor
sieht aus wie Sie es tun rein für diesen einen Fehler, das heißt es gibt wahrscheinlich mehr Fehler, die nicht umgesetzt, Klasse.
InformationsquelleAutor Tom Anderson
Kenne ich aus einem anderen Grund, 'cos ein Kollege hat es hier.
Um das problem zu vermeiden, erklärte hier (Punkt 2), bei der Erzeugung einer Liste von enums, er geben Sie einen eindeutigen Wert, basierend auf der string (ich kann mich nicht erinnern, genau wie jetzt, es kann nicht der hashcode 'cos das ist nicht eindeutig).
Das problem war nur, dass die zahlen heraus kommen ein wenig groß, so dass er aus dem enum ein uint.
InformationsquelleAutor Benjol