Recientemente, realicé mejoras de rendimiento para una función que verifica letras en una cadena con la ayuda de esta página.
Descubrí que las soluciones con expresiones regulares son 30 veces más lentas que las que tienen la verificación Char.IsLetterOrDigit.
No estábamos seguros de que esas letras o dígitos incluyeran y necesitábamos solo caracteres latinos, por lo que implementamos nuestra función basada en la versión descompilada de la función Char.IsLetterOrDigit.
Aquí está nuestra solución:
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;
}
}
Y el uso es así:
if( logicalId.All(c => CheckAllowedChars(c)))
{ // Do your stuff here.. }