2017-05-11 2 views
-1

Je ne sais pas pourquoi j'ai de tels problèmes avec Google aujourd'hui. Je me demandais quels types (le cas échéant) héritent de l'interface ICollection. Il est important de pousser plusieurs entités dans une instance d'ICollection avant de l'enregistrer dans la base de données, mais je ne sais pas dans quel type je devrais les pousser spécifiquement.Quels types héritent de ICollection?

Mise à jour: La question a été répondue, mais je veux m'assurer que je le dis d'une manière pas si confuse (troisième tentative). Plus spécifiquement, j'ai besoin d'un type spécifique qui hérite de ICollection. J'utilise framework d'entité et les classes d'entité contiennent des propriétés virtuelles de type ICollection. Je veux mettre à jour les entités relatives en mettant juste à jour cette propriété sur l'entité principale. Mais cela signifie que je devrais d'abord pousser toutes les instances de l'entité concernée dans une ICollection. Cependant, je ne vois pas clairement quels types héritent de ICollection.

+0

* Je ne sais pas quel type je les pousser en particulier * Est-ce un Question totalement différente de * Quels types héritent de ICollection? * Ce n'est pas que c'est responsable avec ce niveau de détail cependant. –

+1

Utilisez la liste comme décrit dans ma réponse –

+0

Ohh Je pensais que les listes héritaient uniquement de IEnumerable. Merci! –

Répondre

1

Je voudrais juste utiliser un objet List, qui est généralement le plus facile à traiter.

Le code pour que devrait ressembler à ceci

var entities = new List<EntityType> { entity1, entity2 }; 

ou

var entities = new List<EntityType>(); 
entities.add(entity1); 
entities.add(entity2); 

Voici les remarques ICollection pour votre référence:

L'interface ICollection<T> est l'interface de base pour les classes dans l'espace de noms System.Collections.Generic.

L'interface ICollection<T> étend IEnumerable<T>

IDictionary<TKey, TValue> et IList<T> sont des interfaces plus spécialisées qui étendent ICollection<T>. Une implémentation IDictionary<TKey, TValue> est une collection de paires clé/valeur, comme la classe Dictionary<TKey, TValue>. Une implémentation IList<T> est une collection de valeurs et ses membres sont accessibles par index, comme la classe List<T>.

Si l'interface IDictionary<TKey, TValue> ou l'interface IList<T> ne répondent pas aux exigences de la collection requise, dérivez la nouvelle classe de collecte à partir de l'interface ICollection<T> pour plus de flexibilité.

0

Je ne crois pas qu'il existe une liste de ces types pour votre plaisir. Cependant, vous pouvez facilement utiliser la réflexion pour trouver par vous-même:

Type[] types = Assembly.GetAssembly(typeof(int)) 
         .GetTypes() 
         .Where(t => t.GetInterfaces().Any(i => i.Name == "ICollection")) 
         .ToArray(); 

foreach (var type in types) 
{ 
    Console.WriteLine(type.Name); 
} 

Il comprendrait des types comme Array, List, Queue, Dictionary, et tous les autres types de collections traditionnelles.

(Remarque: Tous les types énumérés seront accessibles au public, ni seront beaucoup d'entre eux souhaitable pour un usage général.)