【问题标题】:Using switch to select enum value使用开关选择枚举值
【发布时间】:2015-08-13 17:03:46
【问题描述】:

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

【问题讨论】:

    标签: c# .net reflection enums


    【解决方案1】:

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

    如果是int那么:

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

    如果是String 那么:

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

    以下内容也可能对您有所帮助:

    【讨论】:

    • 正确是什么意思?您的语法是正确的(除了切换后的不完整分配),并且切换内的分配也应该有效。唯一奇怪的是,您将selection 设置为静态值,然后打开它。因此,您将始终执行第一个 case 语句,并且您的 switch 只会重新分配以前设置的值。
    • 我只是想保存用户从下拉列表中选择的内容并将其保存到 a.CourseMode 就像我在 a.StartDate 和 a.EndDate 中所做的那样,因为我的用户将有 3 个选择向下选择我已经使用开关将它们分开。
    • 要回答这个问题,我们需要更多的上下文。你如何从 DropDown 中获取价值?你在使用 WPF 吗?您在哪里编辑用户帐户?这里介绍的 GetUser 方法似乎只与从数据库中读取有关,对吧?编辑条目的代码在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多