使用Enumerable.Cast
:
return query.Cast<ICompany>().ToList();
一些评论:
List<Company> companies = new List<Company>()
这创建了一个新的列表。但是你从来没有使用它,因为在两行之后你有
companies = query.ToList()
如果你想覆盖你创建的列表(在中间的行中,你从未提到companies
),你可以一次性声明并获取结果:
List<Company> companies = query.ToList()
其次,如果你只是想返回结果列表,则所有这些都是不必要的。在编程中,简洁(在一定程度上)是一个重大优点。"少即是多" 是一个常见的说法,因为更少的代码意味着更少的编写、测试和维护工作量。通过编写更少的代码实现即时提高生产力!以下是你方法的简短版本:
public List<ICompany> FindAll() {
var query = from c in _scope.Extent<Company>()
select c;
return query.Cast<ICompany>().ToList();
}
甚至更多
public List<ICompany> FindAll() {
return _scope.Extent<Company>().Cast<ICompany>().ToList();
}
第三,至少你应该考虑返回一个 IList
而不是 List
。最好编写接口而非具体类型的代码。这将使你的代码与实现细节解耦,使代码更容易改变和测试。
最后,你应该审查一下是否真的需要返回一个 List
。你使用了列表的哪些方法?如果仅仅是用它来枚举结果(foreach(var item in list)
),那么你应该返回一个 IEnumerable<ICompany>
:
public IEnumerable<ICompany> FindAll() {
return _scope.Extent<Company>().Cast<ICompany>();
}