TransWikia.com

Como usar o Enum.Parse()?

Stack Overflow em Português Asked by Thulio Mariano on December 11, 2021

Meu código exibe erro ao usar o Enum.Parse<enum>(Console.ReadLine());

Estou pedindo para o usuário digitar o nível do cargo ocupado, porem para receber os dados digitados pelo usuário o Parse<> exibe erro, não passa para o Level.

 Classe program


    static void Main(string[] args)
    {
        Console.WriteLine("Enter client data: ");
        Console.Write("Name: ");
        string clientName = Console.ReadLine();
        Console.Write("Email: ");
        string email = Console.ReadLine();
        Console.Write("Birth date (DD/MM/YYYY): ");
        DateTime birthDate = DateTime.Parse(Console.ReadLine());
        Console.WriteLine("Enter order data: ");
        Console.Write("Level: (Junior/MidLevel/Senior) ");
        OrderStatus Level = Enum.Parse<OrderStatus>(Console.ReadLine());

    }



classe Enums


enum OrderStatus : int
{
    Junior = 0,
    MidLevel = 1,
    Senior = 2
}

Erro CS0308 O método não genérico “Enum.Parse(Type, string)” não pode ser usado como argumentos de tipo SalesOrde

https://github.com/thuliomariano/Exercicio

2 Answers

//class program main ----------------------------------------------

using System;   

 namespace Worker
 {
      class Program
      {
          static void Main(string[] args)
          {
               Console.WriteLine("Enter client data: ");
               Console.Write("Name: ");
               string clientName = Console.ReadLine();
               Console.Write("Email: ");
               string email = Console.ReadLine();
               Console.Write("Birth date (DD/MM/YYYY): ");
               DateTime birthDate = DateTime.Parse(Console.ReadLine());
               Console.WriteLine("Enter order data: ");
               Console.Write("Level: (Junior/MidLevel/Senior) ");
               Enum.TryParse(Console.ReadLine(), out OrderStatus level);
                      
          }
      }
 }
    
    
    
 // enums ----------------------------------------------

 namespace Worker.Entities.Enums
 {
     enum OrderStatus : int
     {
          Junior,
          MidLevel,
          Senior
     }
 }
  

Answered by Fernando Lucas Souza on December 11, 2021

Você não deveria usar o Parse(), isto está explicado em Diferenças entre Parse vs TryParse. Usando o TryParse() ficaria assim e funciona:

using System;
using static System.Console;

public class Program {
    static int Main() {
        WriteLine("Enter client data: ");
        Write("Name: ");
        string clientName = ReadLine();
        Write("Email: ");
        string email = ReadLine();
        Write("Birth date (DD/MM/YYYY): ");
        if (!DateTime.TryParse(ReadLine(), out var birthDate)) return 1;
        WriteLine("Enter order data: ");
        Write("Status: ");
        if (!Enum.TryParse<OrderStatus>(ReadLine(), true, out var status)) return 1;
        return 0;
    }
}
enum OrderStatus {
    Junior = 0,
    MidLevel = 1,
    Senior = 2
}

Veja funcionando no ideone. E no .NET Fiddle. Também coloquei no GitHub para referência futura.

Ainda acho preocupante essa coisa de deixar a pessoa digitar o nível, mas como solução simples até passa se usar o TryParse(), sem ele não pode usar em hipótese alguma, não é robusta.

Answered by Maniero on December 11, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP