Recentemente, fiz melhorias de desempenho para uma função que verifica letras em uma string com a ajuda desta página.
Eu descobri que as soluções com regex são 30 vezes mais lentas que as da verificação Char.IsLetterOrDigit.
Não tínhamos certeza de que essas letras ou dígitos incluíam e precisávamos apenas de caracteres latinos, portanto implementamos nossa função com base na versão descompilada da função Char.IsLetterOrDigit.
Aqui está a nossa solução:
internal static bool CheckAllowedChars(char uc)
{
switch (uc)
{
case '-':
case '.':
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
return true;
default:
return false;
}
}
E o uso é assim:
if( logicalId.All(c => CheckAllowedChars(c)))
{ // Do your stuff here.. }