2016-08-10 1 views
2

Ich benutze MS Bot-Framework und ein Dialogfeld erstellen. Für die Optionen für den Benutzer verfügbar, ich bin mit Aufzählungen und diesen Code die Form zu erstellen:Formular-Dialoge in MS Bot Framework ignorieren das erste Element in allen enums

 return new FormBuilder<InsuranceDialogForm>() 
      .Message("Sure, I will need to ask you a couple of questions first.") 
      .Build(); 

Und meine Aufzählungen wie folgt aussehen:

public class InsuranceDialogForm 
{ 
    //[Prompt("Are you our customer?")] 
    //Disabled prompt because otherwise choice buttons won't appear 
    public IsCurrentCustomer IsCurrentCustomer; 

    //[Prompt("Which type of insurance do you need?")] 
    public InsuranceType InsuranceType; 

    //[Prompt("Which country are you travelling to?")] 
    public string TravelDestination; 

    //[Prompt("Please select one:")] 
    public InsurancePackage InsurancePackage; 
} 

public enum IsCurrentCustomer 
{ 
    Yes, No 
} 

public enum InsuranceType 
{ 
    Travel, Vehicle, Life 
} 

public enum InsurancePackage 
{ 
    Basic, Standard, Executive 
} 

public enum WhoIsTravelling 
{ 
    Me, Family 
} 

Das Problem ist, dass der Bot ignoriert die erste Option von jeder enum. Es ist nicht für die Auswahl in den Buttons verfügbar, die vom Bot ausgegeben werden, und wenn Sie es manuell eingeben, wird es sagen ".... ist keine Option". Also muss ich eine Abhilfe wie folgt verwenden:

public enum IsCurrentCustomer 
{ 
    IGNORE, Yes, No 
} 

In der Zwischenzeit haben Microsoft Beispiele dieses Problem nicht. Was könnte ich falsch machen?

Antwort

7

Der Wert 0 in enums ist für unbekannte Werte reserviert. Entweder können Sie liefern eine explizite oder eine Aufzählung beginnen bei 1.

Von ihrem Beispielcode (https://github.com/Microsoft/BotBuilder/blob/master/CSharp/Samples/PizzaBot/Pizza.cs)

entweder explizit stellen Sie den ersten Wert von ENUM auf 1 oder das Unbekannte enthalten Wert in der Enum (was machst du).

// 1 
public enum IsCurrentCustomer 
{ 
    IGNORE, Yes, No 
} 

// 2 

public enum IsCurrentCustomer 
{ 
    Yes = 1, No 
} 
1

Enum-Variable muss nullbar sein.

public class InsuranceDialogForm 
{ 
    public IsCurrentCustomer? IsCurrentCustomer; 

    //[Prompt("Which type of insurance do you need?")] 
    public InsuranceType? InsuranceType; 

    //[Prompt("Which country are you travelling to?")] 
    public string TravelDestination; 

    //[Prompt("Please select one:")] 
    public InsurancePackage? InsurancePackage; 
} 
2

+1 bis kienct89

Leider kann ich nicht einen Kommentar zu Ihrer Frage hinzufügen, aber nur ein FYI, wenn Sie die Eingabeaufforderung Ausgabe aus nicht gelöst haben.

Zur Zeit haben Sie die folgenden Schritte aus:

//[Prompt("Are you our customer?")] 
//Disabled prompt because otherwise choice buttons won't appear 
public IsCurrentCustomer IsCurrentCustomer; 

es auf die folgende Änderung wird nun die Abfrage mit den ENUM-Werte erlauben:

[Prompt("Are you our customer?" {||})]  
public IsCurrentCustomer IsCurrentCustomer; 

Grundsätzlich fügen Sie einfach {||} auf der Rückseite Die Ansageaufforderung und die Optionen werden angezeigt.

HTH

Verwandte Themen