查看Message Controller for Pizza Example 的示例,如果我想根据一些用户输入填充 Size 或 Kind 并调用数据库,我该怎么做?
据我所知,没有一种简单的方法可以在运行时填充 Enum。
查看Message Controller for Pizza Example 的示例,如果我想根据一些用户输入填充 Size 或 Kind 并调用数据库,我该怎么做?
据我所知,没有一种简单的方法可以在运行时填充 Enum。
看起来这还没有实现。我查看了https://github.com/Microsoft/BotBuilder/blob/master/CSharp/Library/FormFlow/FormBuilder.cs并发现了这个:
internal static void TypePaths(Type type, string path, List<string> paths)
{
if (type.IsClass)
{
if (type == typeof(string))
{
paths.Add(path);
}
else if (type.IsIEnumerable())
{
var elt = type.GetGenericElementType();
if (elt.IsEnum)
{
paths.Add(path);
}
else
{
// TODO: What to do about enumerations of things other than enums?
}
}
else
{
FieldPaths(type, path, paths);
}
}
else if (type.IsEnum)
{
paths.Add(path);
}
else if (type == typeof(bool))
{
paths.Add(path);
}
else if (type.IsIntegral())
{
paths.Add(path);
}
else if (type.IsDouble())
{
paths.Add(path);
}
else if (type.IsNullable() && type.IsValueType)
{
paths.Add(path);
}
else if (type == typeof(DateTime))
{
paths.Add(path);
}
}
请注意关于枚举以外的枚举的 TODO。
在 FormBuilder 之外,我们可以使用PromptDialog.Choice
您IEnumerable<>
的选项。
可以将对话框链接在一起,因此您可能必须将您的对话框FormDialog
分成两部分,并在两者之间使用 PromptDialog。
或者采用 BotBuilder 的一个分支并实现 TODO!