Почему SomethingCollection используется вместо Collection <Something>? - PullRequest
2 голосов
/ 28 октября 2010

В .NET Framework есть некоторые классы, которые используют синтаксис SomethingCollection.

Например, при работе с SqlCommand он имеет параметр Parameters типа SqlParameterCollection.Поскольку он не имеет формы IEnumerable<SqlParameter> (или IList<SqlParameter> или чего-то подобного), невозможно написать:

foreach (var c in sqlCommand.Parameters)
{
    Debug.WriteLine(string.Concat(c.ParameterName, ": ", c.Value));
}

Вместо этого var должен быть заменен явным SqlParameter.

Эта вещь очень похожа при работе с элементами управления Windows Forms (коллекциями элементов списка и т. Д.) И существует в других классах.

Что это за вещь?Почему такие классы существуют и используются вместо общих IEnumerable s / IList s?

Ответы [ 2 ]

7 голосов
/ 28 октября 2010

Многие из коллекций, предоставляемых API-интерфейсами .NET, были разработаны до .NET 2.0, то есть до того, как стали доступны дженерики.

0 голосов
/ 28 октября 2010

Возможно, что некоторые части .net Framework были разработаны разными командами с разными целями.

Некоторые практики доменного дизайна рекомендуют использовать агрегаты, которые являются корневыми объектами, которые контролируют все объекты в коллекциях, как форму временного промежутка для некоторых проблем, возникающих при экспонировании коллекций.

Я предполагаю, что части платформы .net, которые используют этот дизайн, имели причину для ограничения доступа.

...