A melhor maneira de usar uma propriedade para fazer referência a um par Chave-Valor em um dicionário [fechado]

StackOverflow https://stackoverflow.com/questions/44100

Pergunta

Esta é uma forma bastante trivial, mas estou curioso para ouvir as opiniões das pessoas sobre ele.

Se eu tiver um Dicionário que tenho acesso por meio de propriedades, qual destes formatos você prefere para a propriedade?

/// <summary>
/// This class's FirstProperty property
/// </summary>
[DefaultValue("myValue")]
public string FirstProperty {
    get {
        return Dictionary["myKey"];
    }
    set {
        Dictionary["myKey"] = value;
    }

Esta, provavelmente, é o típico modo de fazê-lo.É bastante eficiente e fácil de entender, etc.A única desvantagem é com maior ou mais complexa da chave seria possível errar a ortografia ou alteração de apenas uma instância ou algo assim, levando-me para esta:

/// <summary>
/// This class's SecondProperty property
/// </summary>
[DefaultValue("myValue")]
private const string DICT_MYKEY = "myKey"
public string SecondProperty {
    get {
        return Dictionary[DICT_MYKEY];
    }
    set {
        Dictionary[DICT_MYKEY] = value;
    }

O que é um pouco mais complicado, mas parece oferecer segurança adicional, e está mais perto do que eu acho ser o "Código Completo da solução".A desvantagem é que, quando você também tem um /// bloco e um [valor padrão()] bloco acima que a propriedade já, que começa a ficar um pouco lotado lá em cima.

Então, de qual você gosta mais e por quê?Alguém tem alguma idéia melhor?

Foi útil?

Solução

Eu gosto da segunda puramente porque qualquer vacância de magia seqüências de caracteres/números no código é uma coisa boa.IMO se você precisar fazer referência a um número ou um literal de cadeia de caracteres em código mais de uma vez, isto deve ser uma constante.Na maioria dos casos, mesmo se usado apenas uma vez, ela deve estar em constante

Outras dicas

Eu concordo com o @Glenn para um puramente nit-exigente do ponto de vista.A resposta é o que funciona para você.Todo esse código tem lugar em 10 linhas (se você incluir o omitida última chaveta).Ninguém vai se perder e ter a chance de digitação é muito fina (não impossível, mas muito magro).Por outro lado, se você usou a chave em algum lugar, em seguida, DEFINITIVAMENTE ir com a constante.

Pessoalmente, eu iria sair por você, sobre o seu chaveta estilo.:) Brincadeirinha!Realmente é uma questão de estilo.

Isso não é responder a sua pergunta, mas eu não acho que "valor padrão" significa o que você acha que isso significa.Ele não define um valor padrão para a propriedade.

Ver MSDN e esta pergunta para obter mais detalhes.

Um monte de pessoas, provavelmente, argumentar que a segunda opção é "correta", porque qualquer valor utilizado mais de uma vez deve ser reformulada em uma constante.Eu provavelmente seria usar a primeira opção.Você já chegado perto do "Code Complete" solução encapsulando o dicionário de entrada em um forte digitado propriedade.Isso reduz a chance de estragar a obter o errado entrada de Dicionário na sua implementação.Há apenas 2 lugares onde você poderia atrapalhar a escrever "myKey", no getter e setter, e isso seria muito fácil de detectar.

A segunda opção seria apenas ficar muito bagunçado.

Quando você usar apenas uma seqüência de mágica, em um contexto, como você faz, eu acho que está tudo bem.
Mas, se você precisar usar a chave em outra parte da classe, ir const.

Você poderia coincidir com a propriedade de nomes até as chaves e usar a reflexão para obter o nome para a pesquisa.

public string FirstProperty {
get {
    return Dictionary[PropertyName()];
}
set {
    Dictionary[PropertyName()] = value;
}

private string PropertyName()
{
    return new StackFrame(1).GetMethod().Name.Substring(4);
}

Isso tem o benefício adicional de fazer com que todos de sua propriedade implementação idênticos, assim, você pode configurá-los no visual studio como trechos de código se quer.

@Joel, você não quer contar com StackFrame. Em forro pode arruinar o seu dia, quando você menos esperar.

Mas para a pergunta:De qualquer forma realmente não importa muito.

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