Desempenho String.comparison (com trim)
Eu preciso fazer um monte de comparações de seqüência de caracteres de alta performance sem distinção entre maiúsculas e minúsculas e percebi que minha maneira de fazê-lo .ToLower (). Trim () era realmente estúpido devido a todas as novas seqüências de caracteres sendo alocadas
Então eu cavrei um pouco e assim parece preferível:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
O único problema aqui é que eu quero ignorar os espaços iniciais ou finais, isto é, Trim (), mas se eu usar o Trim, tenho o mesmo problema com as alocações de strings. Eu acho que eu poderia verificar cada seqüência e ver se ele começa com ("") ou EndsWith ("") e somente depois de aparar. Ou isso ou descobrir o índice, o comprimento de cada string e passar para string.Compare substituir
public static int Compare
(
string strA,
int indexA,
string strB,
int indexB,
int length,
StringComparison comparisonType
)
mas isso parece um pouco bagunçado e eu provavelmente tenho que usar alguns números inteiros se eu não fizer uma declaração if-else realmente grande para cada combinação de espaços em branco iniciais e à esquerda em ambas as strings ... então alguma idéia de uma solução elegante?
Aqui está minha proposta atual:
public bool IsEqual(string a, string b)
{
return (string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0);
}
public bool IsTrimEqual(string a, string b)
{
if (Math.Abs(a.Length- b.Length) > 2 ) // if length differs by more than 2, cant be equal
{
return false;
}
else if (IsEqual(a,b))
{
return true;
}
else
{
return (string.Compare(a.Trim(), b.Trim(), StringComparison.OrdinalIgnoreCase) == 0);
}
}