Desafortunadamente, la creación de la clase de búsqueda es interna para .NET Framework. La forma en que se crea la búsqueda es a través de Factory Methods estáticos en la clase Lookup. Estos son:
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);
Sin embargo, estos métodos son internos y no son para el consumo de nosotros. La clase de búsqueda no tiene forma de eliminar elementos.
Una forma de hacer un agregar y quitar es crear constantemente nuevos ILookups. Por ejemplo, cómo eliminar un elemento.
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);
Para añadir a la lista, podríamos hacer algo como esto:
//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);
¿Por qué no crear estás propia implementación de búsqueda? Basándolo en un diccionario, no debería tomar más que unas pocas líneas de código. – leppie
Tipo de acuerdo con Leppie aquí. La clase de búsqueda está allí solo para buscar datos, no para modificarlos. Además, el diccionario no es demasiado difícil de usar de todos modos, podría ser bueno escribir un contenedor en la parte superior de un diccionario. –
La búsqueda también tiene un mecanismo diferente para realizar las búsquedas reales en un diccionario. Pero con algunas pruebas simples, ambas funcionan muy rápido. –