2010-03-22 5 views
1

Je suis en train de remplir object[] avec List<string> mais je ne peux pas comprendre comment utiliser ConvertAll. MSDN ne m'a pas aidé. Au début, j'ai essayé de créer une instance de Converter mais on dirait qu'il attend un délégué?difficultés C# Converter

Converter<string, object> conv = new Converter<string, object>(??); //why delegate? 
this.comboBox1.Items.AddRange(Form1.AnimalType.ConvertAll<object>(conv)); 

Merci :)

Répondre

0

Il n'y a pas besoin de convertir à objet comme tous les types dans l'exécution .NET héritent de l'objet.

Si vous souhaitez affecter les membres de la liste Form1.AnimalTypes à un combobox vous devriez pouvez simplement les ajouter à la collection Items et vous devez définir DisplayMember au nom de la propriété que vous souhaitez afficher et ValueMember au nom de la propriété que vous voulez lier.

comboBox.Items.AddRange(Form1.AnimalTypes); 
comboBox.DisplayMember = "AnimalTypeName"; 
comboBox.ValueMember = "AnimalTypeId"; 

Si vous voulez avoir juste la conversion et l'affectation à la zone de liste déroulante n'a pas d'importance que vous pouvez faire ce qui suit:

object[] myArray = Form1.AnimalTypes.ToArray(); 

La classe convertisseur est nécessaire pour les conversions qui ne sont pas définies par l'héritage d'un objet, c.-à-d. utiliser des convertisseurs si vous voulez convertir des pommes en oranges, mais utiliser des conversions si vous voulez convertir des pommes ou des pommes en fruits. En C# 3.0, vous pouvez lancer une collection complète en utilisant l'extrait suivant:

var newColOfBaseType = myList.Cast<BaseType>(); 

LINQ, vous pouvez également Filte les entrées d'un type donné d'une collection, puis extraire une collection de ce type spécifique:

var oranges = fruit.OfType<Orange>().Cast<Orange>(); 

LINQ, vous pouvez également utiliser Select pour faire une transformation:

var oranges = apples.Select(new Orange() { /* ... and initializers here ...*/}); 
0

Le délégué transforme chaque membre de la collection dans le type demandé.

Si vous essayez de convertir des objets en chaînes, essayer quelque chose comme

conv = o => o.ToString(); 

Si vous essayez de convertir des chaînes à des objets, essayer quelque chose comme

conv = ParseStringIntoObject; 

object ParseStringIntoObject(string stringRepresentation) 
{ 
    // do whatever you need to do in order to convert your string 
} 
+0

Hmm je manque vraiment le point de classe Converter. Quelle est la différence entre ceci et écrire une méthode simple pour la conversion? – Petr

+2

L'utilisation d'un convertisseur fera le « itérer sur chaque élément dans la liste » bit pour vous - vous fournir un délégué, et il l'applique à chaque élément dans une liste (en utilisant ConvertAll). Cela vous permet également de séparer la logique de conversion du reste de votre code - vous pouvez utiliser une classe d'usine ou quelque chose de similaire pour sélectionner un convertisseur approprié basé sur certaines variables. –