Пишу метод поиска по фильтру.
Фильтр представлен в виде отдельного класса.
Хочется иметь возможность не просто скормить экземпляр фильтра, но и пользоваться следующими конструкциями:
public static SearchResult GetByFilter(string searchString)
{
return GetByFilter(f =>
{
f.SearchString = searchString;
f.Score = 7;
f.Page = 2;
});
}
Чтобы оно заработало, как я понял, в качестве аргумента должен выступать Action<FilterClass>
, но вот как потом извлекать этот объект фильтра для использования в методе я не нашёл.
public static SearchResult GetByFilter(Action<FilterClass> filter)
{
//Вот тут надо как-то получить тот самый объект,
//который мы изменяем в предыдущем примере,
//чтобы получить строку для url запроса,
//которую формирует класс фильтра на основе своих свойств.
}
Может я вообще не туда забрёл и мне нужен другой тип аргумента? Подскажите как описать класс, чтобы работали подобного рода конструкции.
Вот в качестве примера обычная реализация этого метода:
public static SearchResult GetByFilter(FilterClass filter)
{
return Api.Get<SearchResult>("/search/" + filter.buildQuery());
}
public static SearchResult GetByFilter(Action<FilterClass> filter)
{
FilterClass filterParams = new FilterClass();
filter(filterParams);
// в этой точке у вас будет измененный filterParams
return Api.Get<SearchResult>("/search/" + filterParams.buildQuery());
}
Не очень понятно, где создается ваш FilterClass
, но как пример
public static SearchResult GetByFilter(string searchString)
{
return GetByFilter(() =>
{
var f = new FilterClass();
f.SearchString = searchString;
f.Score = 7;
f.Page = 2;
return f;
});
}
public static SearchResult GetByFilter(Func<FilterClass> factory)
{
return Api.Get<SearchResult>("/search/" + factory().buildQuery());
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем приветЧем в C# можно заменить WebBrowser? Кроме Awesomium
Не могу понять, если у меня два PunRPC метода в 1 скрипте, то если я вызываю первый метод у Мастер клиента, а второй уже у клиента(который отправил),...
Всем хай Вообщем проблема небольшая Как можно Doc передать в функцию AddData? Я просто через вторую форму даю Doc какой то текст, но оно далее не присваивает...