Используйте string.Contains () с switch ()

Я делаю приложение C #, в котором использую

if ((message.Contains("test")))
{
   Console.WriteLine("yes");
} else if ((message.Contains("test2"))) {
   Console.WriteLine("yes for test2");
}

. Можно было бы каким-то образом изменить на switch () if () операторы?

30
задан Karl Kieninger 6 November 2015 в 04:14
поделиться

2 ответа

Нет, для оператора switch требуются постоянные времени компиляции. Оператор message.Contains("test") может оценивать true или false в зависимости от сообщения, поэтому он не является константой, поэтому не может использоваться в качестве «регистра» для оператора switch.

35
ответ дан 27 November 2019 в 23:00
поделиться

Некоторые пользовательские переключатели могут быть созданы следующим образом. Позволяет также выполнение нескольких случаев

public class ContainsSwitch
{

    List<ContainsSwitch> actionList = new List<ContainsSwitch>();
    public string Value { get; set; }
    public Action Action { get; set; }
    public bool SingleCaseExecution { get; set; }
    public void Perform( string target)
    {
        foreach (ContainsSwitch act in actionList)
        {
            if (target.Contains(act.Value))
            {
                act.Action();
                if(SingleCaseExecution)
                    break;
            }
        }
    }
    public void AddCase(string value, Action act)
    {
        actionList.Add(new ContainsSwitch() { Action = act, Value = value });
    }
}

Вызов как этот

string m = "abc";
ContainsSwitch switchAction = new ContainsSwitch();
switchAction.SingleCaseExecution = true;
switchAction.AddCase("a", delegate() { Console.WriteLine("matched a"); });
switchAction.AddCase("d", delegate() { Console.WriteLine("matched d"); });
switchAction.AddCase("a", delegate() { Console.WriteLine("matched a"); });

switchAction.Perform(m);
2
ответ дан 27 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: