L'ajout de constructeur (ou de fonction) enum
Je ne suis pas sûr si un constructeur est exactement ce que je cherche, mais si j'explique ce que je suis en train de faire j'espère que quelqu'un peut me dire si je suis en train de faire est une idée stupide ou si il y a des façons de le faire.
J'ai donc une enum:
public enum MessageType
{
Normal,
Error,
Chat,
Groupchat,
Headline
}
Cette enum est fondamentalement un wrapper pour le jabber.net MessageType
. Donc, je veux créer mon enum. Donc pour le moment j'ai une fonction comme ceci:
private MessageType ConvertMessageType(JabberMessageType jabberType)
{
MessageType type = MessageType.Error;
switch (jabberType)
{
case JabberMessageType.normal:
type = MessageType.Normal;
break;
//etc
}
return type;
}
J'ai donc utiliser enum MessageType type = ConvertMessageType(JabberMessageType.groupchat);
Ce que je voudrais, cependant, est de pouvoir faire quelque chose comme:
enum MessageType type = MessageType(JabberMessageType.groupchat);
//or
enum MessageType type = MessageType.FromJabberJid(JabberMessageType.groupchat);
De sorte que la conversion appartient à l'enum plutôt que d'être une méthode outtside de.
JabberMessageType.normal
0 est égal à MessageType.Normal
( 0) et autres ....MessageType type = (MessageType type) jabberType
Faire de valeurs de corrélation entre l'un de l'autre à travers les énumérations? Si oui, vous n'avez pas besoin de "convertir", mais juste fonte.
En Java, vous pouvez le faire, à la fois la définition d'un constructeur et non méthode statique. Ici, votre seule option est de créer une extension.
Le Casting est bien sûr possible, mais je ne voudrais pas faire ce qu'il n'est pas certain que les valeurs restent les mêmes et à l'avenir des cas, il pourrait être qu'ils ne le sont pas. C'est aussi que j'ai été très intéressé par ce qui est réellement possible en C#
OriginalL'auteur Firedragon | 2011-11-10
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas créer un méthode d'extension de le faire pour vous?
Exemple d'utilisation:
C'est exactement le genre de chose que je cherchais. Plus j'utilise C# le plus en fait, j'aime comme une langue. Merci pour cette.
OriginalL'auteur Johannes Kommer
Vous ne pouvez pas faire cela. Un Type D'Énumération se traduit par une
int
(oubyte
,sbyte
,short
,uint
,long
ouulong
si spécifié) et n'est pas techniquement unclass
.Une solution serait de mettre une méthode statique pour ce faire, dans un
Utilities
classe.Ah, intéressant, je n'étais pas au courant de cela. Comment? juste faire = 0.5 me donne un message d'erreur indiquant qu'il ne peut pas convertir un int?
par défaut le type sous-jacent de chaque élément de l'énumération est de type int. Vous pouvez spécifier une autre partie intégrante de type numérique à l'aide d'un colon, comme montré dans l'exemple précédent. " j'.e:
public enum MessageType : byte { }
Veuillez noter qu'il est partie intégrante des types numériques seulement. Donc pas de 0,5 s, etcmerci! Je n'ai fait que vous pourriez faire. C'est seulement avec des entiers tels que les types, j'ai pensé que @M. Déception signifie les choses comme
decimal
,bool
,DateTime
, etc. J'ai mis à jour ma réponse brièvement inclure cette.OriginalL'auteur Connell
Comment une classe où votre enum est imbriqué?
Quelque chose comme ceci
OriginalL'auteur dowhilefor
Vous pouvez écrire un simple one-liner qui nécessitent moins de peaufinage dans l'avenir (en cas d'autres valeurs enum), mais cela suppose, l'énumération des noms sont les mêmes dans les deux types:
C'est en quelques sorte une fonctionnalité de mappage, d'un type à un autre.
OriginalL'auteur nawfal