定制收集问题

时间:2009-08-04 08:50:01

标签: c# collections

我有一个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之外。
  3. 我是否忽略了这里的最佳做法?

    很想知道潜在的陷阱:)

4 个答案:

答案 0 :(得分:3)

这很好(和惯用)

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

我想补充一点,返回IQueryable(或者如果不可行IEnumerable)可能是一个更好的主意,以便将来为您的课程提供更多的摆动空间。

答案 1 :(得分:3)

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

我认为这是更好的版本

答案 2 :(得分:0)

如果假设在 return语句之前的try块中出现错误会发生什么,如下面的代码我手动抛出异常并且编译器警告我 return h; 表示它是无法访问的代码。

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

是否可以收到此类警告?

答案 3 :(得分:0)

如果你在try中进行一些处理,那么在try之外声明你的返回对象并将它们返回到catch之外。所以我认为你写的是正确的。

我认为如果您使用更具体的界面(如IEnumerable&lt;&gt;),那么您的消费者(或上层/层)可能在使用您的集合类时遇到问题。他们可能需要添加更多工作(如IEnumerable不支持Count属性)。使用ICollection&lt;&gt;甚至收集&lt;&gt;也应该没问题。