Проведение занятий в словаре - PullRequest
0 голосов
/ 10 мая 2018

У меня есть вопрос о проведении класса в словаре. Так что я работаю над проектом об университете. Есть несколько имен факультетов. Когда пользователь вводит название факультета, я направляю пользователя в соответствующий класс факультета с помощью context.call enter image description here

Так что, если здесь пользователь показывает мне компьютерную технику, он направляется в класс ShowComp.

Но использование if-else делает код действительно нечитаемым. Я подумал, что могу поместить эти ключевые слова в словарь enter image description here

Но это время контекста. Вызов выдает ошибку о типе значения. Что я должен поставить тип значения словаря. Я не мог понять это. Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Поскольку диалоги наследуются от IDialog<object>, вы можете поместить это в словарь:

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);
        }
    }
}
0 голосов
/ 10 мая 2018

Сделай так:

        static Dictionary<String, Type> FACULTY_CLASS_MAP;


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