Como declarar um objeto de dicionário estático dentro de uma classe estática? eu tentei
public static class ErrorCode
{
public const IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>()
{
{ "1", "User name or password problem" }
};
}
Mas o compilador reclama que " Um campo const de um tipo de referência diferente de string só pode ser inicializado com nulo ".
c#
.net
dictionary
Graviton
fonte
fonte
Respostas:
Se você quiser declarar o dicionário uma vez e nunca alterá-lo, declare-o como somente leitura:
Se você quiser que os itens do dicionário sejam somente leitura (não apenas a referência, mas também os itens da coleção), você terá que criar uma classe de dicionário somente leitura que implemente IDictionary.
Confira ReadOnlyCollection para referência.
BTW const só pode ser usado ao declarar valores escalares embutidos.
fonte
ReadOnlyDictionary
. Uma opção mais eficiente (mas menos segura) é atribuí-lo a umIReadOnlyDictionary
tipo.A sintaxe correta (conforme testado no VS 2008 SP1), é esta:
fonte
Pergunta antiga, mas achei isso útil. Acontece que também existe uma classe especializada para um Dicionário usando uma string para a chave e o valor:
Edit: De acordo com o comentário de Chris abaixo, usar
Dictionary<string, string>
overStringDictionary
é geralmente preferido, mas dependerá da sua situação. Se você estiver lidando com uma base de código mais antiga, pode estar limitado aStringDictionary
. Além disso, observe que a seguinte linha:retornará null se
myDict
for aStringDictionary
, mas uma exceção será lançada no caso deDictionary<string, string>
. Veja o post do SO que ele mencionou para mais informações, que é a fonte desta edição.fonte
StringDictionary
vez deDictionary<string, string>
?O problema com seu exemplo inicial foi principalmente devido ao uso de, em
const
vez destatic
; você não pode criar uma referência const não nula em C #.Eu acredito que isso também teria funcionado:
Além disso, como Y Low aponta, adicionar também
readonly
é uma boa ideia, e nenhum dos modificadores discutidos aqui impedirá que o próprio dicionário seja modificado.fonte
fonte
Faça do dicionário um estático, e nunca adicione a ele fora do ctor do seu objeto estático. Essa parece ser uma solução mais simples do que brincar com as regras estáticas / const em C #.
fonte
OK - então estou trabalhando no ASP 2.x (não é minha escolha ... mas ei quem está reclamando?).
Nenhum dos exemplos de inicialização do Dicionário funcionaria. Então me deparei com isso: http://kozmic.pl/archive/2008/03/13/framework-tips-viii-initializing-dictionaries-and-collections.aspx
... o que me alertou para o fato de que não se pode usar a inicialização de coleções no ASP 2.x.
fonte
Você pode usar o construtor static / class para inicializar seu dicionário:
fonte
Provavelmente inicialize no construtor.
fonte