Все, что у меня есть кое-что, что я пытался сделать некоторое время, и пока не нашел хорошей стратегии для этого, я не уверен, что C # может даже поддержать то, что я пытаюсь сделать.
Пример. Представьте себе шаблон, подобный этому, повторяющийся в всеобъемлющей функции cocept кода менеджера. Возвращает результат, состоящий из флага успеха и списка ошибок.
public Result<Boolean> RemoveLocation(LocationKey key)
{
List<Error> errorList = new List<Error>();
Boolean result = null;
try{
result = locationDAO.RemoveLocation(key);
}catch(UpdateException ue){
//Error happened less pass this back to the user!
errorList = ue.ErrorList;
}
return new Result<Boolean>(result, errorList);
}
Нужно превратить его в шаблон, подобный приведенному ниже, где Do Something - это какой-то вызов (предпочтительно не статический), который возвращает логическое значение. Я знаю, что могу сделать это в смысле стека, но я действительно ищу способ сделать это с помощью ссылки на объект.
* +1007 *
Если вам понадобится дополнительная информация, дайте мне знать.
Мне интересно посмотреть, что может придумать кто-то еще.
Решение Марка, примененное к коду выше
public Result<Boolean> CreateLocation(LocationKey key)
{
LocationDAO locationDAO = new LocationDAO();
return WrapMethod(() => locationDAO.CreateLocation(key));
}
public Result<Boolean> RemoveLocation(LocationKey key)
{
LocationDAO locationDAO = new LocationDAO();
return WrapMethod(() => locationDAO.RemoveLocation(key));
}
static Result<T> WrapMethod<T>(Func<Result<T>> func)
{
try
{
return func();
}
catch (UpdateException ue)
{
return new Result<T>(default(T), ue.Errors);
}
}