2010-03-25 2 views
1

Если бы я был CarsDataStore, представляющий собой таблицу что-то вроде:Возвращение IEnumerable от индексатора, плохая практика?

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

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

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

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

ответ

2

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

Однако я бы лично осуществить нечто большее по линии

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

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

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

Смежные вопросы