Você espera de consulta nomes de parâmetro string para ser maiúsculas de minúsculas?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Silverlight é sensível a maiúsculas para consulta parâmetros de cadeia por isso o seguinte código retornaria falso com "callid = 5"

string callId;
if (System.Windows.Browser.HtmlPage.Document.QueryString.TryGetValue("callId", out callId))
{
....
}

Microsoft defende a decisão citando o www.w3.org spec, mas eu acho que leva a uma experiência menos amigável para as pessoas tentando ligar para você, ou dar um URL através do telefone.

Looks como Stackoverflow é maiúsculas e minúsculas: https://stackoverflow.com/search?q=silverlight+bug https://stackoverflow.com/search?Q=silverlight+bug

Foi útil?

Solução

Eu acho que você deve se concentrar em suas convenções de nomenclatura, em vez das implementações de padrões, certificando-se de evitar nomes de campos semelhantes e letras maiúsculas e minúsculas. Por exemplo, você pode usar uma convenção de palavras que através do telefone pode ser lido fora afirmando "em letras minúsculas" ou "todas as letras maiúsculas".

Outras dicas

Eu fiz isso. Não sei se isso ajuda.

var keyName = "";
if (!string.IsNullOrEmpty(keyName = someDictionary.SomeKeys.FirstOrDefault(k => k.ToLowerInvariant() == "size")))
{
    var someValue = someDictionary[keyName];
}

Sim, eu estou acostumado a isso sendo sensível a maiúsculas e, portanto, têm sido programação para ele por um longo tempo. Eu sei de algumas pessoas que implementaram métodos para fazer a análise intermediária para converter todos eles para minúsculas, ou de lado outra coisas servidor, e isso realmente depende do que você está trabalhando com, especificamente.

Quanto à usabilidade, sim, é mais difícil de ler. Mas, ao mesmo tempo, um URL sobre o telefone que tem uma querystring não é fácil de dar para fora de qualquer maneira.

Esta solução alternativa não vai usar o poder de dicionários, porque ele vai percorrer todos chaves, mas é provável que seja uma solução suficiente para a maioria dos cenários.

var keyName = HtmlPage.Document.QueryString.Keys.SingleOrDefault(key => key.Equals("callid", StringComparison.OrdinalIgnoreCase));

string callid;
HtmlPage.Document.QueryString.TryGetValue(keyName, out callid) 

Você também pode transformar todo o dicionário de QueryString para um novo dicionário com um comparador insensível caso, se você está tendo muitas pesquisas de dicionário.

var insensitiveQueryString = HtmlPage.Document.QueryString.ToDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top