我怎样才能退出 if 并返回?

Posted

技术标签:

【中文标题】我怎样才能退出 if 并返回?【英文标题】:How can I exit the if with a return? 【发布时间】:2020-02-27 07:12:53 【问题描述】:

我在运行应用程序机器人时遇到问题。我不能离开 if 语句。我想这是因为我没有做 return 但我不知道如何在这样的函数中构造它,有人可以帮助我吗?

     private async Task OpcionCostoCUV(IDialogContext context, IAwaitable<object> result)
    
        var message = await result as Activity;

        if ((message.Text.Equals("1.- CUV Residencial")) || (message.Text.Equals("1.- cuv residencial")) || (message.Text.Equals("1.- CUV RESIDENCIAL")) || (message.Text.Equals("1"))
            || (message.Text.Equals("1.-")) || (message.Text.Equals("CUV residencial")) || (message.Text.Equals("cuv residencial")) || (message.Text.Equals("CUV RESIDENCIAL"))
            || (message.Text.Equals("2.- CUV de Interes Social")) || (message.Text.Equals("2.- cuv de interes Social")) || (message.Text.Equals("2.- CUV DE INTERES SOCIAL")) || (message.Text.Equals("2"))
            || (message.Text.Equals("2.-")) || (message.Text.Equals("CUV de Interes Social")) || (message.Text.Equals("cuv de interes Social")) || (message.Text.Equals("CUV DE INTERES SOCIAL"))
            || (message.Text.Equals("3.- CUV Media")) || (message.Text.Equals("3.- cuv media")) || (message.Text.Equals("3.- CUV MEDIA")) || (message.Text.Equals("3.-")) || (message.Text.Equals("3"))
            || (message.Text.Equals("CUV Media")) || (message.Text.Equals("cuv media")) || (message.Text.Equals("CUV MEDIA")))
        
            if ((message.Text.Equals("1.- CUV Residencial")) || (message.Text.Equals("1.- cuv residencial")) || (message.Text.Equals("1.- CUV RESIDENCIAL")) || (message.Text.Equals("1"))
            || (message.Text.Equals("1.-")) || (message.Text.Equals("CUV residencial")) || (message.Text.Equals("cuv residencial")) || (message.Text.Equals("CUV RESIDENCIAL")))
            
                await context.PostAsync("1");
            
            else if ((message.Text.Equals("2.- CUV de Interes Social")) || (message.Text.Equals("2.- cuv de interes Social")) || (message.Text.Equals("2.- CUV DE INTERES SOCIAL")) || (message.Text.Equals("2"))
            || (message.Text.Equals("2.-")) || (message.Text.Equals("CUV de Interes Social")) || (message.Text.Equals("cuv de interes Social")) || (message.Text.Equals("CUV DE INTERES SOCIAL")))
            
                await context.PostAsync("2");
            
            else if ((message.Text.Equals("3.- CUV Media")) || (message.Text.Equals("3.- cuv media")) || (message.Text.Equals("3.- CUV MEDIA")) || (message.Text.Equals("3.-")) || (message.Text.Equals("3"))
            || (message.Text.Equals("CUV Media")) || (message.Text.Equals("cuv media")) || (message.Text.Equals("CUV MEDIA")))
            
                await context.PostAsync("3");
            

        
        else
        
            await context.PostAsync("Opcion no Valida");
            await context.PostAsync("Por favor, selecciona el numero de la opcion que deseas consultar.");
            await context.PostAsync(opcion1CUV + "\n" + "\n" + opcion2CUV + "\n" + "\n" + opcion3CUV);
        


    

【问题讨论】:

不要标记其他语言。请阅读How to Ask 如果你声明一个带有返回类型的方法(在这种情况下是Task),那么你需要在方法体中声明return(所有的代码路径都必须返回一个值)。如果您不想返回某些内容,可以将返回类型更改为void。否则,我认为我不理解这个问题。 请解释“不能离开if语句”。如果语句不阻塞,它们只是改变控制流。我建议在调试器中暂停并了解您的应用程序究竟在等待什么。 嗨,这段代码非常难以阅读......但这不是一个完整的例子。您使用的是 Microsoft.Bot.Builder 3.0?如果我查看IDialogContext Interface,似乎PostAsync 需要一个IMessageActivity 输入...如var replyMessage = context.MakeMessage();await context.PostAsync(replyMessage);。我找到了一些代码here 【参考方案1】:

您只需使用一级ifs 即可实现您的逻辑。

if
else if 
else if 
else 

另外,利用字符串的.ToLower()

进行这些更改后,可能会更容易调试问题所在。


第 2 步

string t = message.Text.ToLower();
if (t.StartsWith("1") || t.Contains("CUV Residencial".ToLower()))

    await context.PostAsync("1");

else if (t.StartsWith("2") || t.Contains("CUV de Interes Social".ToLower()))

    await context.PostAsync("2");

else if (t.StartsWith("3") || t.Contains("CUV Media".ToLower()))

    await context.PostAsync("3");

else

    await context.PostAsync("Opcion no Valida");
    (...)

第一步

string t = message.Text.ToLower();

        if ((t == "1.- CUV Residencial".ToLower()) || (t == "1".ToLower())
        || (t == "1.-".ToLower()) || (t == "CUV residencial".ToLower()))
        
            await context.PostAsync("1");
        
        else if ((t == "2.- CUV de Interes Social".ToLower()) || (t == "2".ToLower())
        || (t == "2.-".ToLower()) || (t == "CUV de Interes Social".ToLower()))
        
            await context.PostAsync("2");
        
        else if ((t == "3.- CUV Media".ToLower()) || (t == "3.-".ToLower()) || (t == "3".ToLower())
        || (t == "CUV Media".ToLower()))
        
            await context.PostAsync("3");
        
        else
        
            await context.PostAsync("Opcion no Valida");
            (...)
        

【讨论】:

以上是关于我怎样才能退出 if 并返回?的主要内容,如果未能解决你的问题,请参考以下文章

如何暂时退出 Vim 并返回

我怎样才能退出 do-while 循环?

颤振:我怎样才能抓住后退按钮按下退出我的应用程序

我怎样才能返回一个坚固的结构数组?

我有使用路由的导航。每次当我转到其他页面并返回时,我都会丢失所有变量值。我怎样才能解决这个问题?

从线程/ GCD/完成处理程序返回