Convertit une chaîne de tableau enum à la volée
Je suis de la liaison d'un enum
à une propriété de la grille comme ceci:
public enum myEnum
{
Ethernet,
Wireless,
Bluetooth
}
public class MyClass
{
public MyClass()
{
MyProperty = MyEnum.Wireless;
}
[DefaultValue(MyEnum.Wireless)]
public MyEnum MyProperty { get; set; }
}
public Form1()
{
InitializeComponent();
PropertyGrid pg = new PropertyGrid();
pg.SelectedObject = new MyClass();
pg.Dock = DockStyle.Fill;
this.Controls.Add(pg);
}
Mon problème: j'ai des données à la volée lorsque le programme est en cours d'exécution. J'ai lu la carte réseau, puis stocker les noms d'adaptateur pour myArray
comme ceci:
string[] myArray = new string[] { };
myArray[0] = "Ethernet";
myArray[1] = "Wireless";
myArray[2] = "Bluetooth";
Est possible de convertir myArray
à myEnum
à la volée à l'aide de c#? Merci.
vous affectez les montableau[] valeurs de façon incorrecte pourquoi êtes-vous le codage en dur des les valeurs Enum..?
OriginalL'auteur new bie | 2012-12-12
Vous devez vous connecter pour publier un commentaire.
Sûr! C'est tout ce dont vous avez besoin:
IEnumerable<myEnum> items = myArray.Select(a => (myEnum) Enum.Parse(typeof (myEnum), a));
sinon vous obtiendrez une erreur de compilation, car Enum.Parse() retourne un objetOriginalL'auteur Joshua
Vous aurez envie d'utiliser
Enum.Parse
: http://msdn.microsoft.com/en-us/library/essfb559.aspxMyProperty = (myEnum)Enum.Parse(typeof(myEnum), myArray[0]);
La manière dont vous souhaitez l'utiliser avec votre tableau je suppose que c'est pour répondre à vos besoins.
EDIT: Par hasard, est-il possible de stocker votre carte de noms à votre tableau sous la forme d'énumérations en premier lieu? Est-il une raison quelconque, le tableau doit être des chaînes de caractères?
Ce qui se passe lorsque vous liez un tableau
myEnum[] myArray = new [] {myEnum.Ethernet, myEnum.Wireless, myEnum.Bluetooth};
à la place?Le problème, type Enum n'a jamais existé. Je reçois de données nom de la carte, lorsque le programme s'exécute, puis le stocker dans un tableau de chaînes. Si le tableau de chaîne de liaison au bien-grille, sera afficher une chaîne de la collection de l'éditeur sur la propriété de la grille, alors que je veux à apparaître comme une zone de liste sur le bien-grille. C'est pourquoi je veux convertir une chaîne de caractères à un type enum.
OriginalL'auteur Chris Sinclair
Si votre source de données n'est pas quelque chose d'entièrement fiable, vous pouvez envisager de convertir uniquement les éléments qui peuvent réellement être analysé, à l'aide de
TryParse()
etIsDefined()
.Obtenir un tableau de myEnums à partir d'un tableau de chaînes de caractères peuvent être effectuées par le code suivant:
Noter que
IsDefined()
fonctionne uniquement avec une seule valeur énumérée. Si vous avez un[Flags]
enum, combinaisons échouer le test.OriginalL'auteur Suncat2000
Vous n'avez pas à utiliser Analyser si vous voulez obtenir le nom de la valeur de l'enum. N'utilisez pas de
.ToString()
, utiliser ce lieu. Par exemple, si je veux revenirEthernet
je ferais le suivant:Dans votre classe principale ajoutez cette ligne de code:
Si vous souhaitez énumérer sur les Valeurs Enum vous pourriez faire pour obtenir les valeurs:
OriginalL'auteur MethodMan
Utilisation
Enum.Parse
dans la boucle pour chaque élément dans le tableau.OriginalL'auteur Jakub Konecki