10
votes

C #: Une valeur ENUM peut-elle être enregistrée comme un paramètre?

peut être enregistré enum Enum en tant que paramètre, à l'aide des propriétés .Settings.default ["myseting"] syntaxe de C #? J'ai essayé de créer un paramètre dans les pages de propriétés de mon projet, mais seules les classes système sont apparues dans la liste des types disponibles.

Si cela peut être fait, comment puis-je le faire? Merci d'avance pour votre aide.


0 commentaires

3 Réponses :


16
votes

Il suffit de le stocker comme un int et de le convertir en cas de besoin.

Properties.Settings.Default["MySetting"] = myEnumValue.ToString();

// and later 
var settingValue = Properties.Settings.Default["MySetting"];
MyEnum value = (MyEnum)Enum.Parse( typeof(MyEnum), settingValue );


2 commentaires

Ou stockez une chaîne , puis utilisez Enum.trypsarse . Plus lisible par l'homme de cette façon.


Il y a une meilleure réponse ici . En résumé, dans la colonne Type, sélectionnez "Parcourir ...", puis tapez le nom complet de l'ENUM dans la zone de texte "Type sélectionné" en bas.



0
votes

Voici comment définir le type de paramètre sur myenum code> type d'énum:

  1. Créez votre nouveau paramètre de propriété de type String code> (type chaîne code> sera modifié en myenum code> Tapez dans les étapes suivantes) li>

  2. Ouvrir les paramètres.designer.cs p> li> ol>

    : Entrez la description de l'image ici p>

    1. Modifiez le type de retour de votre nouvelle propriété à partir de String CODE> à votre type Enum myenum code>: p>

      Compte tenu du paramètre Enum Type est nommé myenum code> (dans la société.enums Espace de noms), Modifiez le type de retour à être de type global :: société.enumums.myenum code>: p> XXX PRE> LI> ol>

      De cette façon, il a l'air beaucoup plus propre, avec une seule déclaration; Le type de sécurité est assuré du côté du client, sans qu'il soit nécessaire de faire la chaîne inutile à l'analyse ENUM. P>

      MyEnum value = Properties.Settings.Default["MySetting"];
      


2 commentaires

Le problème avec cette approche est que vs encombrer vos changements si vous apportez une modification des .Settings. Vous ne devriez jamais modifier * .designer.cs fichiers.


Ce que vous pouvez faire est de créer un autre fichier d'extension de la classe partielle définie dans le concepteur, contenant une propriété de conversion.



1
votes

C'est un ancien poste, mais je pense que cette solution mérite d'être publiée pour qui peut rencontrer le même problème.
Fondamentalement, il consiste à créer une nouvelle bibliothèque à référencer par le projet principal afin que cette bibliothèque expose l'ENUM en tant que nouveau type pouvant être sélectionné parmi propriétés.Settings.Settings . Dans mon cas, je veux énumérer des niveaux de sévérité.

la nouvelle bibliothèque

Sous votre solution actuelle, créez une nouvelle bibliothèque de classe vide avec le code ci-dessous: xxx

référence la bibliothèque

  • Compilez et référez la bibliothèque nouvellement créée dans tous les projets qui vont utiliser ce type.
  • Ouvrez maintenant les propriétés de votre projet => Paramètres.
    La nouvelle bibliothèque peut ne pas être encore visible dans la liste déroulante type . Si vous ne le voyez pas, Sélectionnez Parcourir en bas de la liste déroulante et essayez de trouver la bibliothèque. de
    S'il n'est toujours pas visible, tapez le chemin complet du nouveau type dans le champ Type sélectionné . (Dans cet exemple, entrez "CustomTypes.severity" comme indiqué ci-dessous:

    Entrez la description de l'image ici

    À partir de maintenant, le nouveau type doit être visible et utilisable dans propriétés.Settings.Settings.

    Entrez la description de l'image ici

0 commentaires