Warum erstellt Enum.Parse undefinierte Einträge?

class Program
{
    static void Main(string[] args)
    {
        string value = "12345";
        Type enumType = typeof(Fruits);
        Fruits fruit = Fruits.Apple;
        try
        {
            fruit = (Fruits) Enum.Parse(enumType, value);
        }
        catch (ArgumentException)
        {
            Console.WriteLine(String.Format("{0} is no healthy food.", value));
        }
        Console.WriteLine(String.Format("You should eat at least one {0} per day.", fruit));
        Console.ReadKey();
    }

    public enum Fruits
    {
        Apple,
        Banana,
        Orange
    }
}

Wenn Sie den obigen Code ausführen, zeigt das Ergebnis:

Sie sollten mindestens eine 12345 pro Tag essen.

Ich habe wirklich erwartet, dass eine ArgumentException ausgelöst wird, wenn ein unbekannter Name (String) übergeben wird. Ein genauer Blick auf die Enum.Parse-Definition zeigt:

Zusammenfassung
Konvertiert die Zeichenfolgendarstellung des Namens oderZahlenwer von einer oder mehreren aufgezählten Konstanten zu einem äquivalenten aufgezählten Objekt.

Ausnahmen:
ArgumentException: enumType ist keine Aufzählung. -oder- value ist entweder eine leere Zeichenfolge oder enthält nur Leerzeichen. -oder-value ist ein Name, aber keine der benannten Konstanten, die für die Aufzählung @ definiert sin.

D. Wenn eine Zeichenfolgendarstellung einer Ganzzahl übergeben wird, wird ein neuer Aufzählungswert erstellt, und jetzt wird von Entwurf eine Ausnahme ausgelöst. Macht das Sinn

Zumindest weiß ich jetzt, wie man @ anruEnum.IsDefined(enumType, value) vorEnum.Parse()

Antworten auf die Frage(8)

Ihre Antwort auf die Frage