我和一位朋友就一个方法的返回值/输入值中的集合用法进行了一些讨论.他告诉我,我们必须使用 - 返回值的派生类型最多. - 输入参数的派生类型最少.
因此,这意味着,例如,方法必须将ReadOnlyCollection作为参数,并返回List.
而且,他说我们不能在publics API中使用List或Dictionary,而我们必须使用,而不是Collection,ReadOnlyCollection,......所以,在方法是public的情况下,它的参数和返回值必须是Collection,ReadOnlyCollection,......
这样对吗 ?
关于输入参数,使用最不具体的类型通常更灵活.例如,如果您要执行的所有方法都是枚举作为参数传递的集合中的项目,则接受IEnumerable
例如,考虑一个方法"ProcessCustomers",它接受一个客户集合的参数:
public void ProcessCustomers(IEnumerablecustomers) { ... implementation ... }
如果将参数声明为IEnumerable
private IEnumerableGetCustomersByCountryCode(IEnumerable customers, int countryCode) { foreach(Customer c in customers) { if (c.CountryCode == countryCode) yield return c; } } ... ProcessCustomers(GetCustomersByCountryCode(myCustomers, myCountryCode); ...
一般来说,MS指南建议不要暴露List