【问题标题】:Using enum after getting data from a class从类中获取数据后使用枚举
【发布时间】:2012-07-24 08:02:15
【问题描述】:

我是 C# 的初学者,当我遇到这个问题时,我目前正在尝试使用类和数据结构。我想使用提供 char 输入的等级 char 从它的枚举描述中获取 int 输出。欢迎任何帮助。谢谢

using System;
namespace dataStorageOfFiveStudents
{
     public class StudentData
     {
          public string name;
          public int rollNo;
          public char grade;
          public float gpa;
     }
    public class Program
    {
        enum grading { A=4, B=3, C=2, D=2, F=0};
        static void Main(string[] args)
        {
            //Data Entry
            StudentData student1 = new StudentData();
            Console.WriteLine("name?");
            student1.name = Console.ReadLine();
            Console.WriteLine("Roll Number?");
            student1.rollNo = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Grade");
            student1.grade = Convert.ToChar(Console.ReadLine());
            student1.gpa = (int)grading.student1.grade;
            //Output
            Console.WriteLine("Name =\t" + student1.name);
            Console.WriteLine("Roll No =\t" + student1.rollNo);
            Console.WriteLine("Grade =\t" + student1.grade);
            Console.WriteLine("GPA =\t" + student1.gpa);
            Console.ReadKey();
        }
    }
}

【问题讨论】:

    标签: c# class enums


    【解决方案1】:

    您应该使用Enum.ParseEnum.TryParse

    grading gpa;
    if (Enum.TryParse(student1.grade.ToString(), true, out gpa))
    {
        student1.gpa = (float)(int)gpa;
        Console.WriteLine("Name =\t" + student1.name);
        Console.WriteLine("Roll No =\t" + student1.rollNo);
        Console.WriteLine("Grade =\t" + student1.grade);
        Console.WriteLine("GPA =\t" + student1.gpa);
    }
    else
    {
        Console.WriteLine("You entered an invalid letter grade");
    }
    

    【讨论】:

    • @leppie 感谢您了解这一点。起初我对StudentData 的观察不够仔细,但现在应该修复编译错误。如果我有 Visual Studio 可以方便地进行测试...
    【解决方案2】:

    使用Enum.Parse

    假设:

     public class StudenData {
         public string name { get;set; }
         public int rollNo {get;set; }
         public string grade { 
             get { return gpaEnum.ToString(); }
             set { gpaEnum = (grading)Enum.Parse(typeof(grading),value); }
         public gpaEnum { get;set; }
         public int gpa {
             get { return (int)gpaEnum; }
             set { gpaEnum=(grading)value; }
         }
     }
    

    然后

       //Data Entry   
        StudentData student1 = new StudentData();   
        Console.WriteLine("name?");   
        student1.name = Console.ReadLine();   
        Console.WriteLine("Roll Number?");   
        student1.rollNo = Convert.ToInt32(Console.ReadLine());   
        Console.WriteLine("Grade");   
        student1.grade = Console.ReadLine();
        //Output   
        Console.WriteLine("Name =\t" + student1.name);   
        Console.WriteLine("Roll No =\t" + student1.rollNo);   
        Console.WriteLine("Grade =\t" + student1.grade);   
        Console.WriteLine("GPA =\t" + student1.gpa); 
        Console.ReadKey();   
    

    EDIT --- 因为数据结构似乎是固定的

    public class StudenData {
         public string name { get;set; }
         public int rollNo {get;set; }
         public char grade { get;set; }
         public float gpa { get;set; }
     }
    

    然后

       //Data Entry   
        StudentData student1 = new StudentData();   
        Console.WriteLine("name?");   
        student1.name = Console.ReadLine();   
        Console.WriteLine("Roll Number?");   
        student1.rollNo = Convert.ToInt32(Console.ReadLine());   
        Console.WriteLine("Grade");   
        grading grade = (grading)Enum.Parse(typeof(grading),Console.ReadLine());
        student1.grade = grade.ToString()[0]; // Grab first char of grade.
        student1.gpa = (float)(int)grade;
        //Output   
        Console.WriteLine("Name =\t" + student1.name);   
        Console.WriteLine("Roll No =\t" + student1.rollNo);   
        Console.WriteLine("Grade =\t" + student1.grade);   
        Console.WriteLine("GPA =\t" + student1.gpa); 
        Console.ReadKey();   
    

    此代码没有错误检查,如果您想添加验证检查而不是解析失败的异常,您可以使用 Enum.TryParse

    【讨论】:

    • @leppie,你对学生数据有限制吗?如果您将我的原始答案与更改后的学生数据一起使用,则意味着所有逻辑都在类中用于翻译而不是外部。
    【解决方案3】:

    您可以使用此代码轻松完成

    student1.gpa = (int)(Enum.Parse(typeof(grading), student1.grade.ToString().ToUpper()));
    

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多