2009-03-04 9 views
1

J'ai 2 classes distinctes:Quelle collection générique utiliser?

  • AreaProperties
  • FieldProperties

1 AreaProperties peut associez à 1 FieldProperties. Sans changer la conception, je veux une méthode pour retourner un List<> de ces objets

Quelle collection générique en C# conviendrait?

Je comprends que je peux envoyer 2 listes et la fonction ressemblerait à ceci:

public List<AreaProperties> Save(ref List<FieldProperties>) 
{ 
    ..code 
} 

EDIT: Dror Helper semble la solution de bon. Cependant, j'ai récemment découvert qu'il n'y a pas 1: 1 entre FieldProperties et AreaProperties. Comment pourrais-je gérer cela maintenant. Je veux toujours aller avec une classe personnalisée qui a un objet de FieldProperties et AreaProperties mais comment pourrais-je gérer le scénario 1 à plusieurs?

+0

Je ne comprends pas ce que vous essayez de demander. Pouvez-vous clarifier la question? –

+0

Ce n'est pas très clair ce que vous demandez, mais vous ne voulez certainement pas vraiment passer votre liste par référence. Voir http://pobox.com/~skeet/csharp/parameters.html –

+0

Veuillez expliquer la question avec le code de structure/la structure de classe qui pourrait aider. – NileshChauhan

Répondre

9

Vous pouvez créer une classe/struct qui a deux membres - AreaProperties & FieldProperties et retourner une liste de cette classe

class Pair<T1, T2> 
{ 
    T1 t1; 
    T2 t2; 
} 

List<Pair<AreaProperties, FieldProperties>> Save(){ ...} 

Ou utilisez System.Collections.Generic.KeyValuePair à la place (par suggestion Patrick ci-dessous)

List<KeyValuePair<AreaProperties, FieldProperties>> Save(){ ... } 

De cette façon, vous gardez également la relation 1..1.

Edit: Si vous avez besoin 1..n relation Je pense que vous voulez retourner >> Liste à la place de cette façon que vous avez une liste de propriétés de champ pour chaque AreaProperties vous revenez et vous gardez toujours la relation entre eux.

+0

Ne devrait-il pas être Liste Enregistrer()? –

+1

Il existe déjà une structure générique dans .NET, System.Collections.Generic.KeyValuePair (Of TKey, TValue) –

+0

@Thomas Eyde Il devrait être paire <...> - merci pour les têtes –

3

Vous pouvez retourner un List<KeyValuePair<AreaProperties, FieldProperties>>

+0

Tu m'as battu dessus! –

0

Si les 1: 1 relations doivent être appliquées, je recommande la méthode struct Dror mentioned. Si la relation 1: 1 n'est pas appliquée, j'utiliserais le modificateur out.

void foo() 
{ 
    List<AreaProperties> listArea; 
    List<FieldProperties> listField; 
} 

void Bar(out List<AreaProperties> listArea, out List<FieldProperties> listField) 
{ 
    listArea = new List<AreaProperties>(); 
    listField = new List<FieldProperties>(); 

} 
Questions connexes