为什么使用SomethingCollection而不是Collection <something>?</something>

时间:2010-10-28 01:58:40

标签: c# .net winforms ienumerable

在.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窗体控件(列表视图项的集合等)时,事情非常相似,并存在于其他类中。

这是什么东西?为什么存在并使用这些类而不是通用的IEnumerable s / IList s?

2 个答案:

答案 0 :(得分:7)

.NET API公开的许多集合都是在.NET 2.0之前设计的,因此,在提供泛型之前。

答案 1 :(得分:0)

.net框架的某些部分可能是由不同的团队设计的,并且考虑到不同的目标。

领域驱动设计的一些从业者会提倡使用聚合作为控制集合中所有对象的根对象,作为暴露集合所产生的一些问题的一种形式。

我猜测.net框架中使用此设计的部分有限制访问的原因。