2012-07-24 4 views
1

저는 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(); 
     } 
    } 
} 

답변

2

당신은 Enum.Parse 또는 Enum.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"); 
} 
+0

'gpa' 필드는'float' !!! 'grade'는'char'입니다. 이 컴파일되지 않습니다. – leppie

+1

@leppie 잡기 주셔서 감사합니다. 처음에는'StudentData'에서 충분히 자세히 보지 못했지만 컴파일 오류는 이제 고쳐 져야합니다. Visual Studio를 사용하여 확실하게 테스트 할 수 있다면 ... –

0

사용 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(); 

편집 --- 데이터 구조는

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(); 

이 코드가 실패한 구문 분석 예외가 아닌 확인 검증을 추가 할 경우

+0

다시 컴파일 할 방법이 없습니다 ... – leppie

+0

@leppie @ 업데이트로 수정되었습니다. –

+0

@leppie, 학생 데이터가 제한되어 있습니까? 원래의 대답을 변경된 학생 데이터와 함께 사용하면 모든 논리가 외부에서가 아니라 번역을위한 클래스에 있음을 의미합니다. –

0

당신이 코드를 쉽게 할 수 Enum.TryParse를 사용할 수 확인 오류가 없습니다

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