首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Controls集合不提供所有IEnumerable方法?

Controls集合不提供所有IEnumerable方法的原因是因为Controls集合是一种特殊的集合,它是用于存储和管理界面控件的集合。与一般的集合不同,Controls集合需要满足特定的要求和约束,以便能够正确地呈现和交互控件。

Controls集合主要用于界面的构建和布局,它需要考虑到控件的位置、大小、层级关系等因素。因此,Controls集合提供了一些特定的方法和属性,以便开发人员能够方便地操作和管理控件。

虽然Controls集合没有提供所有IEnumerable方法,但它提供了一些常用的方法,如Add、Remove、Clear等,用于添加、移除和清空控件。此外,Controls集合还提供了一些属性,如Count、Item等,用于获取集合中控件的数量和访问特定位置的控件。

Controls集合的设计目的是为了简化界面开发过程,并提供一种方便的方式来管理控件。它并不需要提供所有IEnumerable方法,因为这些方法可能会引入一些不必要的复杂性和性能开销,而且在界面开发中很少会用到。

总结起来,Controls集合不提供所有IEnumerable方法是因为它是一种特殊的集合,专门用于管理界面控件,提供了一些特定的方法和属性来满足界面开发的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • VisualTreeHelper

    Silverlight 中的确存在某些(但并非所有)相关的属性行为,但由于没有用于访问这些行为的帮助器 API,因此,逻辑树概念在 Silverlight 中将没有用武之地,因此本文档讨论它。...工具类,用于操作可视化树,里面有4个静态方法: 官方解释如下:  FindElementsInHostCoordinates  检索一组对象,这些对象位于某一对象的坐标空间的指定点或 Rect 内。...GetChild 使用提供的索引,通过检查可视化树获取所提供对象的特定子对象。  GetChildrenCount 返回在可视化树中在某一对象的子集合中存在的子级的数目。  ...通俗点说:FindElementsInHostCoordinates常用于对象的碰撞检测,GetChild用于获取下级子对象(注意仅仅是下级,而非所有子对象,如果要获取所有子对象,需要自己写代码遍历),...UserControl> using System.Linq; using System.Windows; using System.Collections.Generic; using System.Windows.Controls

    82270

    yield在WCF中的错误使用——99%的开发人员都有可能犯的错误

    我们在一个Console应用中编写了如下一段简单的程序:返回类型为IEnumerable方法GetItems以yield return的方式返回一个包含三个字符串的集合,而在方法开始的时候我们打印一段文字表明定义在方法中的操作开始执行...在Main方法中,我们先调用GetItems方法将“集合对象”返回,然后调用其ToArray方法。在调用该方法之前我们打印一段文字表明对集合对象进行迭代。...也就是说,一旦我们在一个返回类型为IEnumerable或者IEnumerable的方式中通过yield return返回集合元素,意味着这个定义在方法中操作会被“延后执行”——操作的真正执行不是发生在方法调用的时候...如下面的代码片段所示,GetItems方法中没有发现我们定义的代码,而是直接返回一个类型为d__0的对象,看到这里相信读者朋友们知道为什么执行GetItems方法的时候并没有文字输出的真正原因了吧...排斥。

    1.6K90

    【封装那些事】 泄露的封装

    泄露的封装 抽象通过公有接口(方法)暴露或泄露实现细节时,将导致这种坏味。需要注意的是,即使抽象不存在“不充分的封装”坏味,其公有接口也有可能泄露实现细节。 为什么不能泄露封装?...使用细粒度接口 类的公有接口直接提供了细粒度的方法,这些细粒度的方法通常会向客户程序暴露不必要的实现细节。更好的做法是在类的公有接口提供粗粒度的方法,在粗粒度方法内部使用细粒度的私有方法。...如果要支持未来数据结构的变更,方法返回类型可以使用IEnumerable(C#中的集合类型都实现的接口类型),这样可以做到在不改变方法签名的条件下(里氏替换原则),替换存储待办事项列表的数据结构。...当然如果使用IEnumerable这个问题也就迎刃而解了,因为IEnumerable接口没有相应的针对于某一种数据集合的操作。...public interface IEnumerable { // // 摘要: // 返回循环访问集合的枚举数。

    93020

    【封装那些事】 泄露的封装

    泄露的封装 抽象通过公有接口(方法)暴露或泄露实现细节时,将导致这种坏味。需要注意的是,即使抽象不存在“不充分的封装”坏味,其公有接口也有可能泄露实现细节。 为什么不能泄露封装?...使用细粒度接口 类的公有接口直接提供了细粒度的方法,这些细粒度的方法通常会向客户程序暴露不必要的实现细节。更好的做法是在类的公有接口提供粗粒度的方法,在粗粒度方法内部使用细粒度的私有方法。...如果要支持未来数据结构的变更,方法返回类型可以使用IEnumerable(C#中的集合类型都实现的接口类型),这样可以做到在不改变方法签名的条件下(里氏替换原则),替换存储待办事项列表的数据结构。...当然如果使用IEnumerable这个问题也就迎刃而解了,因为IEnumerable接口没有相应的针对于某一种数据集合的操作。...public interface IEnumerable { // // 摘要: // 返回循环访问集合的枚举数。

    1K150

    2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?

    IEnumerator接口为类内部的集合提供了迭代方式, IEnumerator 要求你实现三个方法: MoveNext方法:该方法集合索引加1,并返回一个bool值,指示是否已到达集合的末尾。...Reset方法:它将集合索引重置为其初始值-1,这会使枚举数无效。...Current方法: 返回position位置的当前对象 IEnumerable IEnumerable接口为foreach迭代提供了支持,IEnumerable要求你实现GetEnumerator方法...IEnumerable接口代表该对象具备了可被枚举的性质,是形容词。 总之,如果您想提供对foreach的支持,那么就先让对象可枚举,再谈论枚举方式,也就是说实现这两个接口。...为IEnumerator的Current方法提供异常处理。 为什么要这么做?

    2.8K20

    关于我的知识盲区之ItemsSource的分享~

    下面有一个例子,我们可以看到,初始化界面的时候,数据绑定了一次(mygard.ItemsSource),当点击按钮的时候,itemsource的值就发生改变了,这个是为什么呢?...,它可在添加、删除项目或刷新整个列表时提供通知。...可以枚举实现 IEnumerable 接口的任何集合。 但是,若要设置动态绑定,以便集合中的插入或删除操作自动更新 UI,则集合必须实现 INotifyCollectionChanged 接口。...WPF 提供 ObservableCollection 类,该类是实现 INotifyCollectionChanged 接口的数据集合的内置实现。...如果你有高级方案,并且想要实现自己的集合,请考虑使用 IList,它提供了可按索引单独访问的对象的非泛型集合。 实现 IList提供与数据绑定引擎的最佳性能。

    1.1K20

    C#集合类型大揭秘

    集合是.NET FCL(Framework Class Library)的重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用的集合类型,给我们撸码提供了极大的便利。...首先我们看一下 FCL 给我们提供集合接口: FCL提供了泛型和非泛型两大类集合类型。因为非泛型集合装箱和拆箱带来的性能开销问题,和泛型集合相比,已经变得越来越鸡肋。...所以我们也侧重于泛型集合的分析,但是两者差别不大。 IEnumerable和IEnumerator IEnumerable接口是所有集合类型的祖宗接口,其作用相当于Object类型之于其它类型。...集合直接支持 IEnumerator 和 IEnumerator 接口。...而是直接支持 **IEnumerable**接口,其唯一方法是 GetEnumerator,此方法用于返回支持 IEnumerator 的对象。

    1.2K70

    C#集合类型大揭秘

    集合是.NET FCL(Framework Class Library)的重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用的集合类型,给我们撸码提供了极大的便利。...首先我们看一下 FCL 给我们提供集合接口: ? FCL提供了泛型和非泛型两大类集合类型。因为非泛型集合装箱和拆箱带来的性能开销问题,和泛型集合相比,已经变得越来越鸡肋。...所以我们也侧重于泛型集合的分析,但是两者差别不大。 IEnumerable和IEnumerator ? IEnumerable接口是所有集合类型的祖宗接口,其作用相当于Object类型之于其它类型。...集合直接支持 IEnumerator 和 IEnumerator 接口。...而是直接支持 IEnumerable接口,其唯一方法是 GetEnumerator,此方法用于返回支持 IEnumerator 的对象。

    1.5K40

    Java list foreach_java的foreach

    Java容器中,所有的Collection子类(List、Set)会实现Iteratable接口以实现foreach功能。...小结: foreach相对于for循环,代码减少了,但是foreach依赖IEnumerable(IEnumerable是一个接口,它定义一个方法GetEnumerator,它返回一个IEnumerator...接口,这允许只读访问一个集合,然后实现IEnumerable集合可以与for-each语句一起使用)。...可以说,foreach语句是for语句的特殊简化版本,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。在复杂的循环设计时,还是应该使用for循环更加的灵活。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.6K20

    .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

    其实也就是两点可以扩展,要么提供扩展方法来扩展IEnumerable对象,当然你别企图想让VS支持某种关键字让你对应扩展方法。...如果我们从继承IEnumerable对象扩展,那么情况会有点小复杂,你的扩展方法中要扩展的对象一定要具体的给出对象的定义才行,如果你扩展的对象不能和继承的对象保持一直,那么你将断掉所有的扩展方法。...如果我们是直接使用系统提供IEnumerable对象的话,只需要构建IEnumerable对象的扩展方法就能实现对集合类型的扩展。...我假设使用List来保存一批订单的信息,但是根据业务逻辑需要我们要通过提供一套独立的扩展方法来支持对订单集合数据的处理。这一套独立的扩展方法会跟随着当前系统部署,不作为公共的开发框架的一部分。...下面我们来构建一个简单的IEnumerable扩展方法,用来处理当前集合中的数据是否可以进行数据的插入操作。

    1.4K11

    C#集合类型大盘点

    get; } void Reset(); }   IEnumerator定义了我们遍历集合的基本方法,以便我们可以实现单向向前的访问集合中的每一个元素。...而IEnumerable只有一个方法GetEnumerator即得到遍历器。...IEnumerable是一个很有用的接口,实现它的好处包括: 支持foreach语句 作为一个标准的集合类与其它类库进行交互 满足更复杂的集合接口的需求 支持集合初始化器   当然实现的方法也有很多,如下...而实际上也是如此,我们可以说ICollection比IEnumerable多支持一些功能,不仅仅只提供基本的遍历功能,还包括: 统计集合和元素个数 获取元素的下标 判断是否存在 添加元素到未尾 移除元素等等...IDictionary   IDictionary提供了对键值对集合的访问,也是继承了ICollection和IEnumerable,扩展了通过Key来访问和操作数据的方法

    1.1K70

    C#中的yield

    讲解 在 C# 基础库中经常可以看到很多方法返回值是 IEnumerable 类型,那么为什么返回 IEnumerable 而不是返回 IList、ICollection 或 List 类型呢?...IEnumerable 它表示该集合中的元素可以被遍历,一般来说 IEnumerable 类型的对象会和 yield 紧密结合和。...通过 yield 返回的 IEnumerable 类型表示这是一个可以被遍历的数据集合。它之所以可以被遍历是因为它实现了一个标准的 IEnumerable 接口。...我们把像上面这种包含 yield 语句并返回 IEnumerable 类型的方法称为迭代器(Iterator)。...迭代器方法则是依次返回多个值给调用者,并在这期间保留局部资源,等所有值都返回结束时再释放掉局部资源,这些返回的值将形成一组序列被调用者使用。 迭代器可以用于方法、属性或索引器中。

    73220

    译 | 你到底有多精通 C# ?

    您可以为方法提供第二个参数,以显式请求此类行为: var rounded = Math.Round(2.5, MidpointRounding.ToEven); 可以使用第二个参数的不同值更改行为:...不过,我们通常期望单个实例始终使用相同的方法实现,无论它是由哪个类型强制转换的。这样就可以将集合作为基类,并在集合中的所有实例上调用特定方法,从而为要调用的每个类型实现特定的方法。...我们将调用一个方法,该方法从 using 内部返回一个 IEnumerable: private IEnumerable GetEnumerable(StringBuilder log) {...执行此操作的唯一方法是循环访问已在 GetEnumerable 方法中的集合: private IEnumerable GetEnumerable(StringBuilder log) {...迭代时执行代码,最好将 IEnumerable 的结果存储到本地集合 (例如, list) 中,如果我们计划多次使用它,则从那里读取它: var log = new StringBuilder();

    84140

    重温设计模式 --- 迭代器模式

    引言 迭代器模式是一种行为型设计模式,它允许按照特定顺序遍历集合对象的元素,同时暴露集合的内部结构。这样做可以让客户端代码不依赖于集合对象的具体实现,从而提高代码的灵活性和可重用性。...其中 IEnumerable接口定义了一个GetEnumerator方法,返回一个实现了IEnumerator接口的迭代器对象。...IEnumerator接口则定义了访问集合中元素的方法,包括Current、MoveNext和Reset等。...foreach是C#语法糖,用来遍历实现了IEnumerable接口的集合类。...foreach 循环的原理是通过调用集合类的GetEnumerator方法,返回一个实现了IEnumerator接口的迭代器对象,然后通过迭代器对象的MoveNext方法,依次访问集合中的每个元素,直到集合中的所有元素都被访问完毕

    13910
    领券