Se eu tiver um, Dictionary<String,...>
é possível criar métodos como ContainsKey
sem distinção entre maiúsculas e minúsculas?
Isso parecia relacionado, mas não o entendi direito: Dicionário c #: tornando a Chave sem distinção entre maiúsculas e minúsculas através de declarações
c#
collections
generic-collections
Mr. Boy
fonte
fonte
StringComparer.InvariantCultureIgnoreCase
? Ele faz o que diz ...Respostas:
Está de fato relacionado. A solução é instruir a instância do dicionário a não usar o método de comparação de cadeias padrão (que diferencia maiúsculas de minúsculas), mas a usar uma que não diferencia maiúsculas de minúsculas. Isso é feito usando o construtor apropriado :
O construtor espera um
IEqualityComparer
que diga ao dicionário como comparar chaves.StringComparer.InvariantCultureIgnoreCase
fornece umaIEqualityComparer
instância que compara cadeias de caracteres que não diferenciam maiúsculas de minúsculas.fonte
fonte
Existem poucas chances de o seu negócio com o dicionário ser retirado de terceiros ou de dll externa. Usando linq
YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))
fonte
Any
paraSingleOrDefault
você nãonull
voltará se não existir, em vez disso, receberá um par de valor-chave com a chave e o valor definidos comonull
!Contains
Parece um caso de uso muito específico para algo em que você estava trabalhando no momento. Como uma resposta útil mais genérica, acho queEquals
é melhor. E na mesma nota, em vez de duplicar uma string comToLower()
, seria ainda melhor usarStringComparison.xxxCase
.dict.Keys.Contains("bla", appropriate comparer)
sobrecarga do LINQ para facilitar o uso.Acabei de encontrar o mesmo tipo de problema em que precisava de um dicionário caseINsensitive em um controlador ASP.NET Core.
Eu escrevi um método de extensão que faz o truque. Talvez isso possa ser útil para outros também ...
Para usar o método de extensão:
Em seguida, obtenha um valor do dicionário com:
fonte
Se você não tem controle na criação da instância, digamos que seu objeto seja desterilizado do json etc, você pode criar uma classe de wrapper que herda da classe do dicionário.
fonte