我有一些代码:
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种情况。但是其他条件有两种以上的情况,并且具有不同的变量。例如,此样本具有名称和父变量。但其他条件具有不同的变量,例如年龄和地址等。如何创建类并以编程方式编写此代码。
答案 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");
}
}