从索引器返回IEnumerable,不好的做法?

时间:2010-03-25 12:50:18

标签: c# collections indexer

如果我有一个代表表格的CarsDataStore:

Cars
--------------
Ford | Fiesta
Ford | Escort
Ford | Orion
Fiat | Uno
Fiat | Panda

然后我可以做

IEnumerable<Cars> fords = CarsDataStore["Ford"];

这是个坏主意吗?它与我的api中的其他数据存储对象(它们都有一个列的PK索引器)不一致,我猜大多数人都不希望索引器在这种情况下返回一个集合。

3 个答案:

答案 0 :(得分:2)

是的,我认为这是一个坏主意,特别是,如果它与api的其余部分不一致。一致性是关键,你应该始终努力保持一致。

答案 1 :(得分:2)

我不希望索引器返回一个集合,但编译器会告诉我如果遇到任何问题。

但是,我会亲自实施更多的内容

IEnumerable<Cars> fords = CarsDataStore.GetCarsByType("Ford");

答案 2 :(得分:2)

更改主数据结构,问题就消失了(语法可能不完美):

Dictionary<string, List<string>> cars =
    new Dictionary<string, List<string>>();

cars.Add("Ford", { "Fiesta", "Escort", "Orion" });
cars.Add("Fiat", { "Uno", "Panda" });

IEnumerable<string> fordCars = cars["Ford"];

当然,您必须将string更改为Car,但这个想法是一样的。