C# 使用开关选择枚举值

C# 使用开关选择枚举值,c#,.net,reflection,enums,C#,.net,Reflection,Enums,我是编程新手,所以我不知道自己在做什么。 我从不同的类中提取枚举值,并将它们设置为getter和setter namespace DataLayer.Entities { public enum CourseModeOfDelivery { Online, ClassRoom, ELearning, } public class Course { public int ID { get; set; } pu

我是编程新手,所以我不知道自己在做什么。 我从不同的类中提取枚举值,并将它们设置为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();
                }
            }

要求使用switch,但不知道如何将数据拉入其中。

这取决于您使用的数据库字段的类型

如果是
int
,则:

a.CourseMode = (CourseModeOfDelivery) reader["CourseMode"];
如果是
字符串
,则:

a.CourseMode = (CourseModeOfDelivery) Enum.Parse(typeof(CourseModeOfDelivery), reader["CourseMode"].toString());
以下内容也可能对您有所帮助:


这取决于您使用的数据库字段的类型

如果是
int
,则:

a.CourseMode = (CourseModeOfDelivery) reader["CourseMode"];
如果是
字符串
,则:

a.CourseMode = (CourseModeOfDelivery) Enum.Parse(typeof(CourseModeOfDelivery), reader["CourseMode"].toString());
以下内容也可能对您有所帮助:


你所说的正确到底是什么意思?您的语法是正确的(除了开关后的不完整赋值之外),开关内的赋值也应该有效。唯一奇怪的是,您将
选择设置为静态值,然后将其打开。因此,您将始终执行第一个case语句,并且您的开关仅重新分配以前设置的值。我只是尝试保存用户从下拉列表中选择的内容,并将其保存到.CourseMode,就像我在a.StartDate和a.EndDate中所做的那样,因为我用户将有3个从下拉到选择的选项,所以我使用了要回答这个问题,我们需要更多的上下文。如何从下拉列表中获取值?你在用WPF吗?您在哪里编辑用户帐户?这里介绍的GetUser方法似乎只关心从数据库中读取数据,对吗?你编辑条目的代码在哪里?你所说的正确是什么意思?您的语法是正确的(除了开关后的不完整赋值之外),开关内的赋值也应该有效。唯一奇怪的是,您将
选择设置为静态值,然后将其打开。因此,您将始终执行第一个case语句,并且您的开关仅重新分配以前设置的值。我只是尝试保存用户从下拉列表中选择的内容,并将其保存到.CourseMode,就像我在a.StartDate和a.EndDate中所做的那样,因为我用户将有3个从下拉到选择的选项,所以我使用了要回答这个问题,我们需要更多的上下文。如何从下拉列表中获取值?你在用WPF吗?您在哪里编辑用户帐户?这里介绍的GetUser方法似乎只关心从数据库中读取数据,对吗?编辑条目的代码在哪里?