У меня есть метод, который вычисляет список.В определенных точках алгоритма необходимо выбрать один элемент из списка.На самом деле не имеет значения, какой элемент выбран, но я бы хотел оставить решение за пользователем.
Сейчас я добавил метод расширения IList<T>.Random()
, который просто принимает случайныйэлемент..First()
сработало бы одинаково хорошо.Предположим, я хочу позволить пользователю выбрать, какой метод используется, или, может быть, совершенно другой метод, как бы это выглядело?
Я думал об использовании enum с ограниченными параметрами, а затем я мог обернуть каждый из них.вызывает коммутатор и вызывает соответствующую функцию. Но, возможно, какая-то лямбда-функция будет более уместной ?
Этот метод необходимо использовать в двух разных местах: один раз на List<char>
и один раз наList<string>
.Я хочу использовать один и тот же метод для обоих.
Это не приложение с графическим интерфейсом.Я пытаюсь решить, как разработать API.
В частности, я хочу иметь поле типа
public Func<IList<T>, T> SelectElement = list => list.First();
, которое затем будет использоваться в методе,
public string Reverse(string pattern, IList<object> args = null, IDictionary<string, object> kwargs = null)
Но общие поля невозможны.Поэтому я ищу альтернативное решение.Можно было бы сделать метод SelectElement
аргументом для Reverse (), тогда я мог бы сделать его универсальным ... но я надеялся сохранить его на уровне класса для повторного использования.Не хочу больше передавать аргументы функции, если я могу ей помочь.
Редактировать: полный исходный код