Есть несколько вариантов:
Если это разные типы, вы можете просто использовать перегрузки и подавать все, что у вас есть:
public Foo Get(DateTime date)
public Foo Get(int number)
Тогда вы просто передадите что-нибудь:
_repository.Get(lookupValue);
Просто переместите коммутатор в репо, который будет обрабатывать более общие сценарии, в том числе, когда есть разные поиски для одного и того же типа(т.е. строка):
public Foo Get<T>(string lookupType, T lookupValue)
{
switch (lookupType){
case "date":
GetByDate(lookupValue);
break;
case "serialNumber":
GetBySerialNumber(lookupValue);
break;
}
}
В обоих случаях предполагается, что вы можете каким-то образом передать значение поиска в общем.Если у вас буквально заканчиваются физические переменные date
и number
, и вы не знаете, что передать, то вы как бы застряли с переключателем в своем действии, если только вы не создадите своего рода помощника.объект, чтобы переправить их в метод репо:
public class FooLookup
{
public string Type { get; set; }
public DateTime Date { get; set; }
public int Number { get; set; }
}
Затем:
public Foo Get(FooLookup lookup)
{
switch (lookup.Type){
case "date":
GetByDate(lookup.Date);
break;
case "serialNumber":
GetBySerialNumber(lookup.Number);
break;
}
}
Наконец:
_repository.Get(new FooLookup
{
Type = param,
Date = date,
Number = number
});