数据库中开关箱的数量

时间:2018-07-03 07:57:41

标签: c# switch-statement

我有一些代码:

switch (sabtReqID)
{
    case 0: //user enter name
          req = new SendMessage(item.Message.Chat.Id, "please enter name")
          { ReplyMarkup = returnMenu };
          await bot.MakeRequestAsync(req);
          sabtReqID = 1;
          break;

    case 1: //user enter father
          req = new SendMessage(item.Message.Chat.Id, "please enter faather")
          { ReplyMarkup = returnMenu };
          await bot.MakeRequestAsync(req);
          sabtReqID = 2;
          break;

如何编写此代码以从数据库读取sabtReqID,然后从数据库读取案例计数。例如,此样本有2种情况。但是其他条件有两种以上的情况,并且具有不同的变量。例如,此样本具有名称和父变量。但其他条件具有不同的变量,例如年龄和地址等。如何创建类并以编程方式编写此代码。

1 个答案:

答案 0 :(得分:0)

我认为此版本https://dotnetfiddle.net/JO8F8f的工作原理与您的要求相同。 每个类都有一个ID,相当于您从数据库加载的sabtReqID。通过比较此ID,我找到了正确的类和要执行的正确方法。

你可以试试吗:

public class Program
{
    public static void Main()
    {
         var sabtReqID = 0;

            var myCase = ReflectiveEnumerator.GetEnumerableOfType<Case>().FirstOrDefault(c => c.Id == sabtReqID);
            if (myCase != null)
            {
                myCase.Todo();
            }
        }

        public static class ReflectiveEnumerator
        {
            static ReflectiveEnumerator() { }

            public static IEnumerable<T> GetEnumerableOfType<T>() where T : class
            {
                List<T> objects = new List<T>();
                foreach (Type type in Assembly.GetAssembly(typeof(T)).GetTypes()
                    .Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(T))))
                {
                    objects.Add((T)Activator.CreateInstance(type));
                }
                return objects;
            }
        }
    }


public abstract class Case
{
    public abstract void Todo();

    public virtual int Id { get; }
}

public class NameCase : Case
{
    public override int Id => 0;
    public override void Todo()
    {
        Console.WriteLine("NameCase Hello World");
    }
}

public class FatherNameCase : Case
{
    public override int Id => 1;
    public override void Todo()
    {
        Console.WriteLine("FatherNameCase Hello World");
    }
}