Pergunta

O título diz principalmente. Quero adicionar um método de extensão simples à classe de dicionário base em C#. No começo, eu ia nomear o pop (TKEY KEY), como o método da pilha, mas aceita uma chave a ser usada para pesquisa.

Então eu ia fazer (TKEY KEY), mas coincide com o método LINQ com o mesmo nome ... e embora o C# 3.0 permita fazer isso, eu não gosto.

Então, o que você acha, apenas fique com o pop ou existe um termo melhor para "Encontrar e remover um elemento"?

(Sinto -me meio envergonhado em fazer essa pergunta, parece uma questão tão trivial ... mas gosto de usar padrões e não tenho ampla experiência com muitos idiomas/ambientes.)

EDIT: Desculpe, deveria ter explicado mais ... Nesse caso, não posso usar o termo Remover, pois já está definido pela classe que estou estendendo com um novo método.

EDIT 2: Ok, aqui está o que tenho até agora, inspirado pela sabedoria da multidão como era:

public static TValue Extract<TKey, TValue>
(
    this Dictionary<TKey, TValue> dict,
    TKey key
)
{
    TValue value = dict[key];
    dict.Remove(key);
    return value;
}

public static bool TryExtract<TKey, TValue>
(
    this Dictionary<TKey, TValue> dict,
    TKey key,
    out TValue value
)
{
    if( !dict.TryGetValue(key, out value) )
    {
        return false;
    }
    dict.Remove(key);
    return true;
}
Foi útil?

Solução

Eu acho Extrair, como quando arqueólogos Achar uma múmia no chão, Remova e depois Retornar para um museu :)

Outras dicas

qualquer coisa em particular errada com o Remover (chave) o método já fornecido?

Oh espere, você quer devolver o elemento removido também? e quanto a

object valueRemoved = someDictionary.RemoveElement(key)

facilmente implementado como

if (!dict.ContainsKey(key))
{
    return null;
}
object val = dict[key];
dict.Remove(key);
return val;

Meu primeiro palpite teria sido "levar", mas como você apontou, isso já foi levado. Minhas próximas sugestões seriam "extrair" ou "destacar", mas podem ser ambíguas.

Que tal "retirar" ou "retirar"?

Esta ação lembra um pouco de uma antiga plataforma de colaboração (principalmente acadêmica) chamada Linda. Nesse ambiente, o que você está falando seria chamado "em". Mas esse é um nome terrível - eles basicamente tinham os nomes para trás porque os nomearam do ponto de vista do espaço compartilhado da tupla. Então, deixa de deixar.

O Extract é bom, e "pop" também é bastante óbvio (quase alguém saberia o que você estava fazendo, mesmo que não seja uma pilha).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top