Uno de mis clientes sufrió un bloqueo de aplicación y lo rastreé debido a este error/función que realmente no puedo explicar.
El WindowsIdentity.GetCurrent(). Name.GetHashCode() devuelve esta cadena: -? 2097695743
Sí, eso es un signo menos, un espacio, un signo de interrogación y luego los números reales de hash.C# string.GetHashCode() devuelve resultado no int
Este es el código de una aplicación de consola simple que muestra el comportamiento extraño.
static void Main(string[] args)
{
Console.WriteLine("From String: string name = WindowsIdentity.GetCurrent().Name");
string name = WindowsIdentity.GetCurrent().Name;
Console.WriteLine("name: " + name);
Console.WriteLine("name.GetHashCode().GetType(): " + name.GetHashCode().GetType());
Console.WriteLine("name.GetHashCode(): " + name.GetHashCode());
Console.WriteLine("name.GetHashCode().ToString(): " + name.GetHashCode().ToString());
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Direct");
Console.WriteLine("WindowsIdentity.GetCurrent().Name: " + WindowsIdentity.GetCurrent().Name);
Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode().GetType(): " + WindowsIdentity.GetCurrent().Name.GetHashCode().GetType());
Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode(): " + WindowsIdentity.GetCurrent().Name.GetHashCode());
Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode().ToString(): " + WindowsIdentity.GetCurrent().Name.GetHashCode().ToString());
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
}
Ésta es la salida de texto:
From String: string name = WindowsIdentity.GetCurrent().Name
name: COMMARC\tje
name.GetHashCode().GetType(): System.Int32
name.GetHashCode(): - ?2097695743
name.GetHashCode().ToString(): - ?2097695743
Direct
WindowsIdentity.GetCurrent().Name: COMMARC\tje
WindowsIdentity.GetCurrent().Name.GetHashCode().GetType(): System.Int32
WindowsIdentity.GetCurrent().Name.GetHashCode(): - ?2097695743
WindowsIdentity.GetCurrent().Name.GetHashCode().ToString(): - ?2097695743
Press Enter to continue
Y esta es una imagen de la misma salida:
Mi pregunta es: ¿Cómo demonios es esto posible?
ACTUALIZACIÓN: el problema estaba en la configuración funky de Windows para números negativos.
No lo es. Sospecho que la terminal está loca. (La única otra posibilidad es que 'int.ToString()' sea incorrecto, pero lo dudo). –
¿Qué sucede si escribe el resultado de la aplicación de la consola en un archivo usando '>' (es decir, 'yourApp.exe'>' out.txt') o usar algo como 'File.WriteAllText()' o 'Debug.WriteLine()' – fardjad
Podría ser choque de cultura. ¿Qué imprime 'Name.GetHashCode(). ToString (CultureInfo.InvariantCulture)' print? –