Botframework 在字典里上课

Botframework 在字典里上课,botframework,bots,chatbot,azure-language-understanding,Botframework,Bots,Chatbot,Azure Language Understanding,我有一个关于在字典里上课的问题。所以我正在做一个关于一所大学的项目。有不止一个教员姓名。当用户键入教员姓名时,我使用context.call将用户引导到适当的教员班级 所以在这里,如果用户进入showcomputerengineering,用户将被引导到ShowComp类 但使用if-else会让代码变得不可读。我想我可以把这些关键字放到字典里 但是这次context.Call给出了一个关于值类型的错误。我应该把什么放在字典值类型中。我弄不清楚。有人能帮我吗?这样做: stati

我有一个关于在字典里上课的问题。所以我正在做一个关于一所大学的项目。有不止一个教员姓名。当用户键入教员姓名时,我使用context.call将用户引导到适当的教员班级

所以在这里,如果用户进入showcomputerengineering,用户将被引导到ShowComp类

但使用if-else会让代码变得不可读。我想我可以把这些关键字放到字典里

但是这次context.Call给出了一个关于值类型的错误。我应该把什么放在字典值类型中。我弄不清楚。有人能帮我吗?

这样做:

        static Dictionary<String, Type> FACULTY_CLASS_MAP;


        /**
         * faculty class mapping.
        */
        FACULTY_CLASS_MAP= new Dictionary<String, Type>
        {
            { "Text", typeof(FacultyClass) }
        }

由于对话框继承自IDialog,因此可以将其放入字典中:

private readonly Dictionary<string, IDialog<object>> options 
      = new Dictionary<string, IDialog<object>>
        { { "computer", new ShowComp() }, { "law", new ShowLaw() } };

public async Task GetFacilities(IDialogContext context, LuisResult result)
{
    var entity = result.Entities.FirstOrDefault(e => options.ContainsKey(e.Entity));

    if (entity != null)
    {
        IDialog<object> dialog = null;
        if (options.TryGetValue(entity.Entity, out dialog))
        {
            context.Call(dialog, this.AfterResume);
        }
    }
}

不使用对象映射,如果使用类,则应执行IDialog option=IDialogActivator.CreateInstanceoptions[option_from_query],new object[]{},Context.Calloption,after。。。。或者在……之后调用options[option\u from\u query]。。。。这是一个编程错误