J'ai obtenu l'énumération suivante:
public enum detallistaDocumentStatus {
/// <remarks/>
ORIGINAL,
/// <remarks/>
COPY,
/// <remarks/>
REEMPLAZA,
/// <remarks/>
DELETE,
}
puis j'ai obtenu une propriété de classe de type detallistaDocumentStatus:
public detallistaDocumentStatus documentStatus {
get {
return this.documentStatusField;
}
set {
this.documentStatusField = value;
}
}
Dans la vie réelle, l'utilisateur nous enverra un nombre (1, 2, 3 ou 4) représentant chaque valeur d'énumération dans l'ordre où elles sont déclarées.
alors, est-il possible de lancer comme ça?
det.documentStatus = (detallistaDocumentStatus)3;
sinon, comment pourrais-je obtenir la valeur enum en utilisant un entier comme index, nous utilisons beaucoup d'énumérations, nous voulons donc faire quelque chose de générique et réutilisable
Oui, il est possible de convertir Enum
en int
et vice versa, car chaque Enum
est en fait représenté par un int
par défaut. Vous devez spécifier manuellement les valeurs des membres. Par défaut, il commence de 0 à N.
Il est également possible de convertir Enum
en string
et vice versa.
public enum MyEnum
{
Value1 = 1,
Value2 = 2,
Value3 = 3
}
private static void Main(string[] args)
{
int enumAsInt = (int)MyEnum.Value2; //enumAsInt == 2
int myValueToCast = 3;
string myValueAsString = "Value1";
MyEnum myValueAsEnum = (MyEnum)myValueToCast; // Will be Value3
MyEnum myValueAsEnumFromString;
if (Enum.TryParse<MyEnum>(myValueAsString, out myValueAsEnumFromString))
{
// Put logic here
// myValueAsEnumFromString will be Value1
}
Console.ReadLine();
}
Oui c'est possible. J'utilise les ENUM
suivants
public enum AccountTypes
{
Proposed = 1,
Open = 2
}
puis quand je l'appelle, j'utilise ceci pour obtenir la valeur:
(int)AccountTypes.Open
Et il renverra la valeur int dont j'ai besoin qui, pour ce qui précède, sera 2.
De la spécification C # 4.0:
1.10 Énumérations
Les valeurs d'énumération peuvent être converties en valeurs intégrales et vice versa à l'aide de transtypages de type. Par exemple
int i = (int)Color.Blue; // int i = 2; Color c = (Color)2; // Color c = Color.Blue;
Une autre chose à savoir est que vous êtes autorisé à transtyper n'importe quelle valeur intégrale dans la plage du type sous-jacent de l'énumération (par défaut, c'est int), même si cette valeur ne correspond pas à l'un des noms de la déclaration d'énumération. À partir de 1.10 Enums:
L'ensemble de valeurs qu'un type enum peut prendre n'est pas limité par ses membres enum. En particulier, toute valeur du type sous-jacent d'une énumération peut être convertie en type énumération et est une valeur valide distincte de ce type énumération.
Ainsi, ce qui suit est également autorisé avec l'énumération dans votre exemple:
det.documentStatus = (detallistaDocumentStatus) 42;
même si aucun nom d'énumération n'a la valeur 42
.
det.documentStatus = (detallistaDocumentStatus)3;
Ce qui précède devrait fonctionner correctement. La seule chose à retenir ici est que si vous attribuez des numéros spécifiques aux membres d'énumération, quelque chose comme cela peut ne pas fonctionner comme prévu. De plus, si vous ne numérotez pas explicitement vos valeurs d'énumération, les membres d'énumération commencent à un index basé sur zéro.
Ainsi, le code ci-dessus attribuerait le 4ème membre de l'énumération dans l'ordre de déclaration.
Pour vérifier si un entier donné est une valeur d'énumération valide pour cette énumération, utilisez Enum.IsDefined
Si vous donnez une valeur entière explicite à vos membres enum, comme ceci:
public enum Foo
{
Five=5
, Six
, Seven
, Eight
}
Vous pouvez simplement les convertir en int
pour obtenir la valeur implicite.
var bar = (int)Foo.Six: /// bar == 6
Si vous ne définissez pas explicitement une valeur pour au moins la première, la convertir en un int vous donnera l'ordre dans lequel elle apparaît dans la déclaration.