Ich stelle diese Frage, obwohl ich ähnlich gelesen habe, aber nicht genau das, was ich bei der C # -Namenskonvention für Aufzählung und übereinstimmende Eigenschaft möchte
Ich habe festgestellt, dass ich die Tendenz habe, Enums im Plural zu benennen und sie dann als Singular zu verwenden. Beispiel:
public enum EntityTypes {
Type1, Type2
}
public class SomeClass {
/*
some codes
*/
public EntityTypes EntityType {get; set;}
}
Natürlich funktioniert es und das ist mein Stil, aber kann jemand ein potenzielles Problem mit einer solchen Konvention finden? Ich habe allerdings eine "hässliche" Benennung mit dem Wort "Status":
public enum OrderStatuses {
Pending, Fulfilled, Error, Blah, Blah
}
public class SomeClass {
/*
some codes
*/
public OrderStatuses OrderStatus {get; set;}
}
Zusätzliche Informationen: Vielleicht war meine Frage nicht klar genug. Ich muss oft nachdenken, wenn ich die Variablen meiner definierten Aufzählungstypen benenne. Ich kenne die Best Practice, aber es hilft mir nicht, diese Variablen leichter zu benennen.
Ich kann unmöglich alle meine Enum-Eigenschaften (sagen wir "Status") als "MyStatus" verfügbar machen.
Meine Frage: Kann jemand ein potenzielles Problem mit meiner oben beschriebenen Konvention finden? Es geht NICHT um Best Practice.
Umformulierung der Frage:
Nun, ich denke, ich sollte die Frage folgendermaßen stellen: Kann jemand eine gute generische Methode finden, um den Aufzählungstyp so zu benennen, dass die Benennung der Aufzählungsinstanz bei Verwendung ziemlich einfach ist?
Antworten:
Microsoft empfiehlt die Verwendung von Singular für
Enum
s, es sei denn, dasEnum
stellt Bitfelder dar (verwenden Sie auch dasFlagsAttribute
). Siehe Aufzählungstyp Namenskonventionen (eine Untergruppe von Microsofts Richtlinien zur Benennung ).Um auf Ihre Klarstellung zu antworten, sehe ich nichts Falsches an den folgenden Punkten:
oder
quelle
OrderStatus == OrderStatus.Pending
wird als Variable für die linke und dann als Aufzählung auf der rechten Seite erkanntIch habe angefangen, Enums im Plural zu benennen, bin aber seitdem zu Singular gewechselt. Scheint nur im Zusammenhang mit dem Verwendungszweck sinnvoller zu sein.
Vergleichen mit:
Ich finde, dass die Singularform im Kontext natürlicher klingt. Wir sind uns einig, dass wir bei der Deklaration der Aufzählung, die an einem Ort stattfindet, denken, "dies ist eine Gruppe von was auch immer", aber wenn wir sie verwenden, vermutlich an vielen Orten, denken wir, "dies ist was auch immer". .
quelle
0
für den unbekannten Wert zu verwenden. Auf diese Weise ist standardmäßig eine nicht initialisierte VariableUnknown
.[Flags]
Ihrem Beispiel wirklich ein Attribut hinzufügen? Es ist nicht sinnvoll, dass etwas den Status "Unvollständig" und "Bereit" hat. Wenn jaenum [Flags]Steps { First, Second, Third }
, würden Sie Ihre Variable wirklich benennencompletedStep
?Die Situation trifft nie wirklich auf den Plural zu.
An
enum
zeigt ein Attribut von etwas oder einem anderen. Ich werde ein Beispiel geben:Sie können einen Typ haben, aber versuchen Sie, ihn im Vielfachen und nicht im Plural zu betrachten:
Humour.Irony | Humour.Sarcasm
Eher, als
Humours { Irony, Sarcasm }
Sie haben einen Sinn für Humor, Sie haben keinen Sinn für Humor.
quelle
Humours
enthältHumours.Irony | Huomours.Sarcasm
?Im Allgemeinen ist die Best-Practice-Empfehlung Singular, mit Ausnahme der Aufzählungen, denen das Attribut [Flags] zugeordnet ist (und die daher Bitfelder enthalten können), die Plural sein sollten.
Nach dem Lesen Ihrer bearbeiteten Frage habe ich das Gefühl, dass der Name der Eigenschaft oder der Variable vom Namen des Aufzählungstyps abweichen muss. Das Folgende ist vollkommen in Ordnung ...
quelle
public Color Color { get {...} set {...} }
Dies ist einer der wenigen Orte, an denen ich mit der Konvention nicht einverstanden bin, um dagegen zu verstoßen. TBH, ich hasse es, dass die Definition einer Aufzählung und die Instanz derselben den gleichen Namen haben können. Ich postfixiere alle meine Enums mit "Enum", weil dadurch klar wird, welchen Kontext es in einer bestimmten Verwendung hat. IMO macht es den Code viel lesbarer.
Niemand wird jemals verwirren, was die Aufzählung ist und was die Instanz davon ist.
quelle
Enum
? Es ist nicht so, als würde der Autor vorschlagen, alle Vars mit ihrem Typ zu fixieren. Der Autor hat auch einen viel stärkeren Fall, da ein Grund angegeben wird, während M $ keine Rechtfertigung liefert.Wenn Sie versuchen, einfachen, aber verbotenen Code wie diesen zu schreiben:
Ihre Optionen sind:
Ignorieren Sie die MS-Empfehlung und verwenden Sie ein Präfix oder Suffix für den Namen der Aufzählung:
Verschieben Sie die Aufzählungsdefinition außerhalb der Klasse, vorzugsweise in eine andere Klasse. Hier ist eine einfache Lösung für das oben Gesagte:
quelle
enum
zuerst verwenden und es dann in einer weiteren Klasse verschachteln, wenn dies Probleme verursacht?Gender
und den Aufzählungsnamen als zu habenSex
. Alsoisac.Gender = Sex.Male
..Best Practice - Verwenden Sie Singular. Sie haben eine Liste von Elementen, aus denen eine Aufzählung besteht. Die Verwendung eines Elements in der Liste klingt seltsam, wenn Sie sagen
Versions.1_0
. Es ist sinnvoller zu sagen,Version.1_0
da es nur eine 1_0-Version gibt.quelle
Kommt etwas spät ...
Es gibt einen wichtigen Unterschied zwischen Ihrer und der von Ihnen erwähnten Frage (die ich gestellt habe ;-):
Sie haben die Aufzählungsdefinition aus der Klasse entfernt, sodass Sie für die Aufzählung und die Eigenschaft denselben Namen haben können:
In diesem Fall würde ich den MS-Richtlinien folgen und einen singulären Namen für die Aufzählung verwenden (Plural für Flags). Es ist wahrscheinlich die einfachste Lösung.
Mein Problem (in der anderen Frage ) ist, wenn die Aufzählung im Bereich der Klasse definiert wird, wodurch die Verwendung einer Eigenschaft verhindert wird, die genau nach der Aufzählung benannt ist.
quelle
Auf der anderen Thread- C # -Namenskonvention für Enum und Matching-Eigenschaft jemand darauf hingewiesen, was ich für eine sehr gute Idee halte:
"Ich weiß, dass mein Vorschlag gegen die .NET-Namenskonventionen verstößt, aber ich persönlich stelle Enums mit 'E' und Enum-Flags mit 'F' voran (ähnlich wie wir Interfaces mit 'I' voranstellen)."
quelle