C# .NET 4.5, Windows 10, ho il seguente enum:C# Enum.TryParse analizza stringhe numero non valido
private enum Enums
{
A=1, B=2, C=3
}
E questo programma si comporta in un modo molto strano:
public static void Main()
{
Enums e;
if (Enum.TryParse("12", out e))
{
Console.WriteLine("Parsed {0}", e);
}
else
{
Console.Write("Not parsed");
}
Console.ReadLine();
}
I si aspetterebbe che il risultato del metodo TryParse sia falso, ma con mia sorpresa la console mostra "Parsed 12". Nella finestra di controllo mostra anche che il valore è "12" ed è del tipo Enums!
Questo vale per qualsiasi stringa di numeri che ho provato (ad esempio "540"), ma non per stringhe che includono lettere ("A12", "12A").
Posso facilmente superarlo verificando prima se si tratta di una stringa numero-solo, ma perché questo è il comportamento? È di progettazione?
Grazie! Ido
Sì, è di progettazione. È una buona idea che se '.ToString()' su un valore può restituire una stringa specifica, e il tipo in questione ha un metodo '.Parse()', allora il metodo di analisi dovrebbe accettare quella stringa in cambio. Poiché le enum possono contenere valori "sconosciuti" (cioè valori che non hanno un nome nell'enumerazione) e '.ToString()' restituiranno questi come il numero in una stringa, quindi seguirà '.Parse() 'dovrebbe accettare una stringa che contiene solo un numero intero. Quindi sì, questo è di design. Potresti non essere d'accordo con questa decisione, ma è quello che è. –