如何在使用switch创建不同的对象类型时最小化代码冗余

时间:2016-04-14 08:56:58

标签: c#

您好我正在创建一个程序的一部分,我需要返回特定类型的对象列表。代码的问题部分如下。它看起来太多余了,我想要一种简单的方法

switch (sqlDataReader["TypeName"].ToString())
    {
                case "Manager":
                {
                    yield return new Manager(
                        sqlDataReader["Employee_ID"].ToString(),
                        sqlDataReader["Name"].ToString(),
                        sqlDataReader["ContactInfo"].ToString(),
                        sqlDataReader["JoinDateTime"].ToString(),
                        bool.Parse(sqlDataReader["Active"].ToString()),
                        sqlDataReader["Username"].ToString(),
                        sqlDataReader["Password"].ToString()
                        );
                    break;
                }
                case "Inventory Manager":
                {
                    yield return new InventoryManager(
                        sqlDataReader["Employee_ID"].ToString(),
                        sqlDataReader["Name"].ToString(),
                        sqlDataReader["ContactInfo"].ToString(),
                        sqlDataReader["JoinDateTime"].ToString(),
                        bool.Parse(sqlDataReader["Active"].ToString()),
                        sqlDataReader["Username"].ToString(),
                        sqlDataReader["Password"].ToString()
                        );
                    break;
                }
                case "Cashier":
                {
                    yield return new Cashier(
                        sqlDataReader["Employee_ID"].ToString(),
                        sqlDataReader["Name"].ToString(),
                        sqlDataReader["ContactInfo"].ToString(),
                        sqlDataReader["JoinDateTime"].ToString(),
                        bool.Parse(sqlDataReader["Active"].ToString()),
                        sqlDataReader["Username"].ToString(),
                        sqlDataReader["Password"].ToString()
                        );
                    break;
                }
            }
        }

        Connection.Close();
    }

有没有办法可以避免这种冗余?仅供参考我有一个名为User的抽象基类。

谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个:

Type type = Type.GetType(sqlDataReader["TypeName"].ToString());
var instanceOfClass =
    Activator.CreateInstance(
            type,
            sqlDataReader["Employee_ID"].ToString(),
            sqlDataReader["Name"].ToString(),
            sqlDataReader["ContactInfo"].ToString(),
            sqlDataReader["JoinDateTime"].ToString(),
            bool.Parse(sqlDataReader["Active"].ToString()),
            sqlDataReader["Username"].ToString(),
            sqlDataReader["Password"].ToString()
    );

通过使用它,您将不需要switch语句。

答案 1 :(得分:1)

您可以使用用于创建对象的所有属性创建新的类或结构UserData,并在构造函数中使用此UserData

a