【问题标题】:How to replace ugly if constructs?如何替换丑陋的 if 构造?
【发布时间】:2022-05-21 20:14:25
【问题描述】:

我有一个方法可以接收回调查询回调查询基于按下的内置按钮。 根据收到的数据,我想调用几个方法 我怎样才能做到正确?我目前的解决方案很难看,因为如果有 10 个或更多按钮,这等于 10 个条件。我的解决方案之一是字典,但由于调用了多个方法,我无法实现它。 请原谅我的英语,我的方法将在底部:

private static async Task BotOnCallbackQueryReceived(ITelegramBotClient botClient, CallbackQuery callbackQuery)
        {
            string url = $\"https://api.telegram.org/bot{Configuration.BotToken}/sendMessage?chat_id={Configuration.idPrivateChannelProgrammers}&text={$\"{Configuration.textMessageToSend} @{callbackQuery.From.Username}.\"}\";
           
            if (callbackQuery.Data == \"testString1\")
            {
                SendsAMessageToUrlApiTelegramBot(url);
                _ = SendsAMessageToTheUserAsync(botClient, callbackQuery);
            }

            if (callbackQuery.Data == \"testString2\")
            {
                //string url = $\"https://api.telegram.org/bot{Configuration.BotToken}/sendMessage?chat_id={Configuration.idPrivateChannelItManager}&text={$\"{Configuration.textMessageToSend} @{callbackQuery.From.Username}.\"}\";
                SendsAMessageToUrlApiTelegramBot(url);
                _ = SendsAMessageToTheUserAsync(botClient, callbackQuery);
            }

            if (callbackQuery.Data == \"HelpUser\")
            {
                const string messageCallb = \"testString3\";


                await botClient.SendTextMessageAsync(
                chatId: callbackQuery.Message.Chat.Id, 
                text: $\"{messageCallb}\");
            }

        }

标签: c# .net telegram-bot clean-architecture


【解决方案1】:

正如here 解释的那样,您可以在 switch 语句中使用字符串作为区分参数:

string str = "one";
          
// passing string "str" in 
// switch statement
switch (str) {              
    case "one":
        Console.WriteLine("It is 1");
        break;
  
    case "two":
        Console.WriteLine("It is 2");
        break;
  
    default:
        Console.WriteLine("Nothing");
        break;
}

【讨论】:

  • 我听说使用开关结构是不可取的,还有其他解决方案吗?我自己也想过switch,是不是比if好很多?
  • 曾经告诉过你 switch 不受欢迎的人应该被忽略或者被断章取义。先解决问题,然后再怀疑它是否是最新时尚或违背某人的意见,或有性能问题。请注意,如果在某些情况下以某些语言完成的性能最高的操作,它可能是一种
  • 我会更加实际,感谢大家写信给我的建议。
  • @ItachiU - 在某些情况下不希望使用 switch case,例如,当您想要创建一个设计时,您希望能够在不返回已完成的类的情况下添加 case 并更改 case 逻辑以实现附加功能 (Open-Closed Principle) .但在某些情况下,使用 switch case 非常有意义,因为选项不太可能随着时间而改变,或者如果您正在优化性能。也就是说,通过您的问题来判断您有哪种情况并不容易。
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多