Возвращение IEnumerable из индексатора, плохая практика? - PullRequest
1 голос
/ 25 марта 2010

Если бы у меня был CarsDataStore, представляющий таблицу что-то вроде:

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

Тогда я мог бы сделать

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

Это плохая идея? Это несовместимо с другими объектами хранилища данных в моем API (которые все имеют индексатор PK одного столбца), и я предполагаю, что большинство людей не ожидают, что индексатор вернет коллекцию в этой ситуации.

Ответы [ 3 ]

2 голосов
/ 25 марта 2010

Я бы не ожидал, что индексатор вернет коллекцию, но тогда компилятор скажет мне об этом, если возникнут какие-либо проблемы.

Однако я бы лично реализовал что-то более похожее на

IEnumerable<Cars> fords = CarsDataStore.GetCarsByType("Ford");
2 голосов
/ 25 марта 2010

Измените основную структуру данных, и ваша проблема исчезнет (синтаксис, вероятно, не идеален):

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, но идея будет такой же.

2 голосов
/ 25 марта 2010

Да, я думаю, что это плохая идея, особенно если она несовместима с остальной частью API. Последовательность является ключевой вещью, и вы всегда должны стремиться быть последовательными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...