Я делаю приложение C #, в котором использую
if ((message.Contains("test")))
{
Console.WriteLine("yes");
} else if ((message.Contains("test2"))) {
Console.WriteLine("yes for test2");
}
. Можно было бы каким-то образом изменить на switch ()
if ()
операторы?
Нет, для оператора switch требуются постоянные времени компиляции. Оператор message.Contains("test")
может оценивать true или false в зависимости от сообщения, поэтому он не является константой, поэтому не может использоваться в качестве «регистра» для оператора switch.
Некоторые пользовательские переключатели могут быть созданы следующим образом. Позволяет также выполнение нескольких случаев
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);