Пользовательский вопрос коллекции - PullRequest
0 голосов
/ 04 августа 2009

У меня есть класс CustomerRepository (в моем BL), и я возвращаю коллекцию следующим образом:

 public static ICollection<Customer> FindCustomers()
    {
        Collection<Customer> customers = null;
        try
        {
           customers = DAL.GetCustomers();             
        }
        catch (Exception ex)
        {
            //log and re-throw exception here
        }
        return customers;
    }

У меня есть несколько вопросов по этому вопросу:

  1. В порядке блок try / catch?
  2. Я создаю коллекцию вне try и возвращаю ее вне catch.

Я пропускаю какие-либо лучшие практики здесь?

Хотелось бы узнать о потенциальных ошибках здесь:)

Ответы [ 4 ]

3 голосов
/ 04 августа 2009
public static ICollection<Customer> FindCustomers()
{
        try
        {
           return DAL.GetCustomers();
        }
        catch (Exception ex)
        {
            //log here
            throw;
        }
}

Я думаю, что это лучшая версия

3 голосов
/ 04 августа 2009

Это нормально (идиоматично)

public static ICollection<Customer> FindCustomers()
{
    try
    {
       return DAL.GetCustomers();         
    }
    catch (Exception ex)
    {
        //log and re-throw exception here
    }
}

Я бы добавил, что возвращение IQueryable (или, если не возможно, IEnumerable), вероятно, является лучшей идеей, чтобы дать вашему классу больше пространства для маневра в будущем относительно того, как организованы данные.

0 голосов
/ 04 августа 2009

Если вы выполняете некоторую обработку внутри try, то объявляйте возвращаемые объекты вне try и возвращайте их за пределами catch. Поэтому я думаю, что вы написали правильно.

Я думаю, что если вы используете более конкретные интерфейсы (например, IEnumerable <>), то у ваших потребителей (или верхних уровней / уровней) могут возникнуть проблемы с использованием классов вашей коллекции. Возможно, им потребуется добавить больше работы (например, IEnumerable не поддерживает свойство Count). Использование ICollection <> или даже Collection <> также должно быть в порядке.

0 голосов
/ 04 августа 2009

Что произойдет, если предположить, что ошибка произошла в блоке try до оператора возврата , как в приведенном ниже коде, я вручную генерирую исключение, и компилятор предупреждает меня в строке return h; что это недоступный код.

 public int Test()
        {
            try
            {
                int h = 0;
                h = 100;
                throw new Exception();
                return h;
            }
            catch (Exception ex)
            {
                throw;
            }
        }

Можно ли иметь такие предупреждения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...