Malheureusement, la création de la classe Lookup est interne au framework .NET. La façon dont la recherche est créée est via les méthodes d'usine statiques dans la classe Recherche. Ce sont:
internal static Lookup<TKey, TElement> Create<TSource>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer);
internal static Lookup<TKey, TElement> CreateForJoin(IEnumerable<TElement> source, Func<TElement, TKey> keySelector, IEqualityComparer<TKey> comparer);
Cependant, ces méthodes sont internes et non pour la consommation par nous. La classe de recherche n'a aucun moyen de supprimer des éléments. Une façon d'ajouter et de supprimer est de créer constamment de nouveaux ILookups. Par exemple - comment supprimer un élément.
public class MyClass
{
public string Key { get; set; }
public string Value { get; set; }
}
//We have a fully populated set:
var set = new List<MyClass>() //Populate this.
var lookup = set.ToLookup(m => m.Key, m => m);
//Remove the item where the key == "KEY";
//Now you can do something like that, modify to your taste.
lookup = lookup
.Where(l => !String.Equals(l.Key, "KEY"))
//This just flattens the set - up to you how you want to accomplish this
.SelectMany(l => l)
.ToLookup(l => l.Key, l => l.Value);
Pour ajouter à la liste, nous pourrions faire quelque chose comme ceci:
//We have a fully populated set:
var set = new List<MyClass>() //Populate this.
var lookup = set.ToLookup(m => m.Key, m => m);
var item = new MyClass { Key = "KEY1", Value = "VALUE2" };
//Now let's "add" to the collection creating a new lookup
lookup = lookup
.SelectMany(l => l)
.Concat(new[] { item })
.ToLookup(l => l.Key, l => l.Value);
Pourquoi vous êtes ne pas vous créer votre propre application de recherche? Basé sur un dictionnaire, ne devrait pas prendre plus de quelques lignes de code. – leppie
Sorte d'accord avec lepie ici. La classe de recherche est là uniquement pour rechercher des données, et non pour les modifier. De plus, le dictionnaire n'est pas trop difficile à utiliser de toute façon, peut-être bien d'écrire un wrapper sur un dictionnaire. –
La recherche a également un mécanisme différent pour faire les recherches réelles sur un dictionnaire. Mais avec quelques tests simples, ils fonctionnent tous deux très rapidement. –