Вызов частичного держит ваш application.html.erb
еще чище.
<%= render 'shared/flash_messages' if !flash.empty? %>
.. и частично сделайте что-то вроде того, что упомянул @zolter:
<div id="flash_messages">
<% flash.each do |key, value| %>
<%= content_tag(:div, value, :class => "flash #{key}") %>
<% end %>
</div>
Раздел 8.3.2 .NET Framework Design Guidelines Second Edition :
DO использовать
ReadOnlyCollection
, a подклассReadOnlyCollection
или в редких случаяхIEnumerable
для свойств или возвращаемых значений, представляющих коллекции только для чтения.
Мы используем ReadOnlyCollections, чтобы выразить наше намерение коллекция вернулась.
Методы List
, о которых вы говорите, были добавлены в .NET 2.0 для удобства. В C # 3.0 / .NET 3.5 вы можете вернуть все эти методы на ReadOnlyCollection
(или на любой IEnumerable
), используя методы расширения (и также используйте операторы LINQ. ), поэтому я не думаю, что есть какая-то мотивация для добавления их изначально к другим типам.
Я не понимаю, почему они не были добавлены изначально. Но теперь, когда у нас есть LINQ, я определенно не вижу причин добавлять их в будущие версии языка. Упомянутые вами методы сегодня можно легко написать в запросе LINQ. Сегодня я использую запросы LINQ практически для всего. На самом деле меня чаще всего раздражает наличие этих методов в List
, потому что это конфликтует с методами расширения, которые я пишу для IEnumerable
.
Я думаю, что ответ Джеффа как бы содержит тот ответ, который вам нужен; вместо ReadOnlyCollection
верните его подкласс ... тот, который вы реализуете самостоятельно, чтобы включить методы, которые вы хотели бы использовать, без обновления до VS2008 / LINQ.
Во-первых, ReadOnlyCollection
действительно реализует IEnumerable
и IList
. Со всеми методами расширения в .NET 3.5 и LINQ у вас есть доступ почти ко всем функциям исходного класса List
с точки зрения запросов, а это все, что вам нужно делать с ReadOnlyCollection
в любом случае.
С учетом сказанного, ваш первоначальный вопрос заставляет меня сделать несколько предложений ...
Возврат List
- плохой дизайн, поэтому он не должно быть точкой сравнения. List
должен использоваться для реализации, но для интерфейса должен быть возвращен IList
. В Руководстве по разработке структуры конкретно говорится:
« НЕ используйте ArrayList
или List
в общедоступных API.» (Страница 251)
Если принять это во внимание, у ReadOnlyCollection
нет никаких недостатков по сравнению с List
. Оба этих класса реализуют IEnumerable
и IList
, которые в любом случае должны быть возвращены.