我有一个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;
}
我对此有几个问题:
我是否忽略了这里的最佳做法?
很想知道潜在的陷阱:)
答案 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;也应该没问题。