Есть несколько способов для достижения этой цели, которые, как вы используете на самом деле зависит от того, сколько доступа вы должны изменить класс ваших «кнопок» (что вы на самом деле не сказали нам, что это такое).
Вариант 1: Добавление нового члена в классе (при условии, что класс «кнопок» ваш собственный класс)
Измените свой класс, чтобы новый элемент, называемый Action
или некоторое такое имя. Этот элемент будет Delegate
(примечание: Вы можете использовать более конкретный тип, как Action<T>
, если вы знаете, действие каждой кнопки имеет одинаковую сигнатуру методы После того как вы этот член заявил, вы можете легко назвать его псевдокод:..
public class MyButton {
public bool isClicked { get; }
public Delegate action { get; }
}
foreach (var item in buttons) {
if(item.isClicked)
((Action)item.action)(); // assuming that your "action" is a method which returns nothing and takes no arguments, cast to a more appropriate type if needed
}
Вариант 2: сопоставить каждую кнопку с действием Аналогичный принцип для варианта 1, за исключением того, что вы не можете напрямую модифицировать класс поддержки, вам придется привязать действия к кнопкам после факта. Вы можете создать карту (или Dictionary<TKey,TValue>
в C#), чтобы отобразить кнопки для их действий. Для этого создайте новый словарь и добавьте каждую кнопку в качестве ключа вместе с ее действием:
// Declared at class-scope
private readonly Dictionary<MyButton,Delegate> _actions = new Dictionary<MyButton,Delegate>(); // I don't know what type 'buttons' is so I'm substituting it with "MyButton"
// In some initializer for the class (i.e the constructor)
_actions.Add(buttons[0], start)
_actions.Add(buttons[1], options)
// .. etc
// Then your loop becomes something like:
foreach(var item in buttons) {
if (item.isClicked && _actions.ContainsKey(item)) {
((Action)_actions[item])();
}
}
Не могли бы вы показать последовательность утверждений 'if', которых вы хотели бы избежать? Пример кода, который у вас есть, слишком неясен. – dasblinkenlight
Этот вопрос немного странный. Переключатель имел бы смысл с учетом этого метода перечисления. Однако более обычный подход должен был бы сделать это с помощью прослушивателей событий, прикрепленных к каждой кнопке. – AndySavage