Почему не делает ReadOnlyCollection <>, включают методы как FindAll (), FindFirst (),

Вызов частичного держит ваш 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>
6
задан Mark Levison 28 May 2009 в 17:57
поделиться

4 ответа

Раздел 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. ), поэтому я не думаю, что есть какая-то мотивация для добавления их изначально к другим типам.

6
ответ дан 8 December 2019 в 14:46
поделиться

Я не понимаю, почему они не были добавлены изначально. Но теперь, когда у нас есть LINQ, я определенно не вижу причин добавлять их в будущие версии языка. Упомянутые вами методы сегодня можно легко написать в запросе LINQ. Сегодня я использую запросы LINQ практически для всего. На самом деле меня чаще всего раздражает наличие этих методов в List , потому что это конфликтует с методами расширения, которые я пишу для IEnumerable .

3
ответ дан 8 December 2019 в 14:46
поделиться

Я думаю, что ответ Джеффа как бы содержит тот ответ, который вам нужен; вместо ReadOnlyCollection верните его подкласс ... тот, который вы реализуете самостоятельно, чтобы включить методы, которые вы хотели бы использовать, без обновления до VS2008 / LINQ.

0
ответ дан 8 December 2019 в 14:46
поделиться

Во-первых, ReadOnlyCollection действительно реализует IEnumerable и IList . Со всеми методами расширения в .NET 3.5 и LINQ у вас есть доступ почти ко всем функциям исходного класса List с точки зрения запросов, а это все, что вам нужно делать с ReadOnlyCollection в любом случае.

С учетом сказанного, ваш первоначальный вопрос заставляет меня сделать несколько предложений ...

Возврат List - плохой дизайн, поэтому он не должно быть точкой сравнения. List должен использоваться для реализации, но для интерфейса должен быть возвращен IList . В Руководстве по разработке структуры конкретно говорится:

« НЕ используйте ArrayList или List в общедоступных API.» (Страница 251)

Если принять это во внимание, у ReadOnlyCollection нет никаких недостатков по сравнению с List . Оба этих класса реализуют IEnumerable и IList , которые в любом случае должны быть возвращены.

7
ответ дан 8 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: