2015-08-13 154 views
0

我是編程新手,所以我不知道我在做什麼。 我拉從不同的類的枚舉值,並將它們設置爲getter和setter。使用開關選擇枚舉值

namespace DataLayer.Entities 
{ 
    public enum CourseModeOfDelivery 
    { 
     Online, ClassRoom, ELearning, 
    } 
    public class Course 
    { 
     public int ID { get; set; } 
     public String CourseName { get; set; } 
     public String Description { get; set; } 
     public DateTime StartDate { get; set; } 
     public DateTime EndDate { get; set; } 
     public CourseModeOfDelivery CourseMode { get; set; } 
    } 

在courseRepository

public static Course GetCourse(int id) 
     { 
      Course a = new Course(); 
      String GetCommand = "Select CourseName, Description, StartDate, EndDate, CourseMode from Course" + "Where ID = @CourseID"; 

      SqlConnection connection = DBManager.GetSqlConnection(); 
      SqlCommand command = new SqlCommand(GetCommand, connection); 
      command.Parameters.AddWithValue("@StudentID", id); 

      try 
      { 
       var reader = command.ExecuteReader(); 

       //Read the Command Object and then return details 
       if (reader.HasRows) 
       { 
        while (reader.Read()) 
        { 
         a.ID = Convert.ToInt32(reader["ID"]); 
         a.CourseName = reader["CourseName"].ToString(); 
         a.Description = reader["Description"].ToString(); 
         a.StartDate = DateTime.Parse(reader["StartDate"].ToString()); 
         a.EndDate = DateTime.Parse(reader["EndDate"].ToString()); 

         var selection = CourseModeOfDelivery.ClassRoom; 
         switch (selection) 
         { 
          case CourseModeOfDelivery.ClassRoom: 
           a.CourseMode = CourseModeOfDelivery.ClassRoom; 
           return a.CourseMode; 

          case CourseModeOfDelivery.ELearning: 
           a.CourseMode = CourseModeOfDelivery.ELearning; 
           return a.CourseMode; 
          case CourseModeOfDelivery.Online: 
           a.CourseMode = CourseModeOfDelivery.Online; 
           return a.CourseMode; 
         } 
        a.CourseMode = 
        } 
       } 
       else 
       { 
        reader.Close(); 
       } 
      } 

閱讀此值的要求是使用開關,但不知道怎麼拉在那裏的數據。

回答

4

這取決於您使用的數據庫字段的類型。

如果是int則:

a.CourseMode = (CourseModeOfDelivery) reader["CourseMode"]; 

如果是String則:

a.CourseMode = (CourseModeOfDelivery) Enum.Parse(typeof(CourseModeOfDelivery), reader["CourseMode"].toString()); 

下也可以幫助你:

+0

但您是否認爲我的switch語句正確? – user1669556

+0

你準確的意思是什麼?您的語法是正確的(除了交換機之後的不完整賦值),並且交換機內部的分配也應該工作。唯一奇怪的是你將'selection'設置爲靜態值,然後打開它。因此,您將始終執行第一個case語句,並且您的開關只會重新分配先前已設置的值。 – Darneas

+0

我只是想保存用戶從下拉列表中選擇並保存到a.CourseMode,就像我在a.StartDate和a.EndDate一樣,因爲我的用戶將有3個選擇從下拉選擇我使用開關將它們分開。 – user1669556