IEnumerable和IEnumerable<T>接口

别再只盯着Text-VQA了!这4个主流VQA数据集(含中英双语)的保姆级下载与对比指南 本文深入解析了Text-VQA、ST-VQA、OCR-VQA和EST-VQA这4个主流视觉问答数据集的特性与应用场景,提供了详细的下载与预处理指南。通过对比分析,帮助开发者根据项目需求选择最适合的数据集,避免因选型不当导致的模型性能问题,特别适合需要处理中英双语或多模态文本理解的AI项目。 阅读详情
IEnumerable和IEnumerable<T>接口

IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简单的迭代,IEnumerable和IEnumerable<T>接口是.NET Framework中最基本的集合访问器,这两个接口对于LINQ的理解是非常重要的。

在面向对象的开发过程中,常常需要创建若干对象,并进行对象的操作和查询,在创建对象前,首先需要声明一个类为对象提供描述,示例代码如下所示。

using System;

using System.Collections.Generic;

using System.Linq;                                                                                                //使用LINQ命名控件

using System.Text;

namespace IEnumeratorSample

{

class Person //定义一个Person类

    {

        public string Name;                                                                               //定义Person的名字

        public string Age;                                                                                   //定义Person的年龄

        public Person(string name, string age)                                                       //为Person初始化(构造函数)

        {

            Name = name;                                                                               //配置Name值

            Age = age;                                                                                       //配置Age值

        }

    }

上述代码定义了一个Person类并抽象一个Person类的属性,这些属性包括Name和Age。Name和Age属性分别用于描述Person的名字和年龄,用于数据初始化。初始化之后的数据就需要创建一系列Person对象,通过这些对象的相应属性能够进行对象的访问和遍历,示例代码如下所示。

    class Program

    {

        static void Main(string[] args)

        {

            Person[] per = new Person[2]                                                      //创建并初始化2个Person对象

            {

                new Person("guojing","21"),                                                 //通过构造函数构造对象

                new Person("muqing","21"),                                                //通过构造函数构造对象

            };

            foreach (Person p in per)                                                             //遍历对象

                Console.WriteLine("Name is " + p.Name + " and Age is " + p.Age);

            Console.ReadKey();

        }

    }

}

上述代码创建并初始化了2个Person对象,并通过foreach语法进行对象的遍历。但是上述代码是在数组中进行查询的,就是说如果要创建多个对象,则必须创建一个对象的数组,如上述代码中的Per变量,而如果需要直接对对象的集合进行查询,却不能够实现查询功能。例如增加一个构造函数,该构造函数用户构造一组Person对象,示例代码如下所示。

        private Person[] per;

        public Person(Person[] array)                                                    //重载构造函数,迭代对象

        {

            per = new Person[array.Length];                                       //创建对象

            for (int i = 0; i < array.Length; i++)                                               //遍历初始化对象

            {

                per[i] = array[i];                                                               //数组赋值

            }

        }

上述构造函数动态的构造了一组People类的对象,那么应该也能够使用foreach语句进行遍历,示例代码如下所示。

            Person personlist = new Person(per);                              //创建对象

            foreach (Person p in personlist)                                        //遍历对象

            {

                Console.WriteLine("Name is " + p.Name + " and Age is " + p.Age);

            }

在上述代码的foreach语句中,直接在Person类的集合中进行查询,系统则会报错“ConsoleApplication1.Person”不包含“GetEnumerator”的公共定义,因此foreach语句不能作用于“ConsoleApplication1.Person”类型的变量,因为Person类并不支持foreach语句进行遍历。为了让相应的类能够支持foreach语句执行遍历操作,则需要实现派生自类IEnumerable并实现IEnumerable接口,示例代码如下所示。

public IEnumerator GetEnumerator()                                                                //实现接口

    {

        return new GetEnum(_people);

    }

为了让自定义类型能够支持foreach语句,则必须对Person类的构造函数进行编写并实现接口,示例代码如下所示。

    class Person:IEnumerable                                                                 //派生自IEnumerable,同样定义一个Personl类

    {

        public string Name;                                                             //创建字段

        public string Age;                                                                 //创建字段

        public Person(string name, string age)                                    //字段初始化

        {

            Name = name;                                                             //配置Name值

            Age = age;                                                                    //配置Age值

        }

        public IEnumerator GetEnumerator()                              //实现接口

        {

            return new PersonEnum(per);                                  //返回方法

        }

}

上述代码重构了Person类并实现了接口,接口实现的具体方法如下所示。

    class PersonEnum : IEnumerator                                            //实现foreach语句内部,并派生

    {

    public Person[] _per;                                                                   //实现数组

    int position = -1;                                                                           //设置“指针”

    public PersonEnum(Person[] list)

    {

        _per = list;                                                                             //实现list

    }

    public bool MoveNext()                                                              //实现向前移动

    {

        position++;                                                                            //位置增加

        return (position < _per.Length);                                        //返回布尔值

    }

    public void Reset()                                                                      //位置重置

    {

        position = -1;                                                                         //重置指针为-1

    public object Current                                                                  //实现接口方法

    {

        get

        {

            try

            {

                return _per[position];                                           //返回对象

            }

            catch (IndexOutOfRangeException)                        //捕获异常

            {

                throw new InvalidOperationException();                  //抛出异常信息

            }

        }

    }

    }

上述代码实现了foreach语句的功能,当开发Person类初始化后就可以直接使用Personal类对象的集合进行LINQ查询,示例代码如下所示。

        static void Main(string[] args)

        {

            Person[] per = new Person[2]                                    //同样初始化并定义2个Person对象

            {

                new Person("guojing","21"),                              //构造创建新的对象

                new Person("muqing","21"),                              //构造创建新的对象

            };

            Person personlist = new Person(per);                     //初始化对象集合

            foreach (Person p in personlist)                               //使用foreach语句

                Console.WriteLine("Name is " + p.Name + " and Age is " + p.Age);

            Console.ReadKey();

        }

从上述代码中可以看出,初始化Person对象时初始化的是一个对象的集合,在该对象的集合中可以通过LINQ直接进行对象的操作,这样做即封装了Person对象也能够让编码更加易读。在.NET Framework 3.5中,LINQ支持数组的查询,开发人员不必自己手动创建IEnumerable和IEnumerable<T>接口以支持某个类型的foreach编程方法,但是IEnumerable和IEnumerable<T>是LINQ中非常重要的接口,在LINQ中也大量的使用IEnumerable和IEnumerable<T>进行封装,示例代码如下所示。

public static IEnumerable<TSource> Where<TSource>

(this IEnumerable<TSource> source,Func<TSource, Boolean> predicate)                 //内部实现

        {

            foreach (TSource element in source)                                                 //内部遍历传递的集合

            {

                if (predicate(element))

                    yield return element;                                                               //返回集合信息

            }

        }

上述代码为LINQ内部的封装,从代码中可以看到,在LINQ内部也大量的使用了IEnumerable和IEnumerable<T>接口实现LINQ查询。IEnumerable原本就是.NET Framework中最基本的集合访问器,而LINQ是面向关系(有序N元组集合)的,自然也就是面向IEnumerable<T>的,所以了解IEnumerable和IEnumerable<T>对LINQ的理解是有一定帮助的。

ANSYS APDL实战:手把手教你搞定电磁-热耦合分析(附完整命令流) 本文通过一个工业感应加热线圈的实战案例,手把手教你使用ANSYS APDL完成电磁-热耦合分析。内容涵盖从几何建模、材料定义、网格划分到加载求解及后处理的完整流程,重点讲解了使用PLANE13单元进行双向耦合场分析的方法与命令流调试技巧,助力工程师快速掌握这一核心仿真能力。 阅读详情

相关推荐

解密Android相机框架:从HAL到应用层的全链路解析

本文深入解析Android相机框架的全链路架构,从应用层到硬件抽象层(HAL)再到驱动层,详细介绍了CamX-CHI架构的设计哲学与实战应用。通过HAL3接口、V4L2交互机制及Camera2 API的最佳实践,帮助开发者优化相机性能,解决多摄切换、预览卡顿等常见问题,提升成像效率与稳定性。

weixin_29238147的博客 408

C# 常用接口学习 IEnumerable<T>

我们先去看看公开的.Net4.0的源程序中IEnumerable<T>、IEnumerable、IEnumerator<T>和IEnumerator这四个接口是如何...

zls365365的博客 3253

STM32F103C8T6板子使用说明

pcb版,把众多元器件集中到一个板子上面管理。

LYC_462857656的博客 2191

【C#基础】C#中的IEnumerable<T>接口介绍

在C#中,IEnumerable 是一个泛型接口,它表示一个可以通过 IEnumerator 迭代器进行枚举的集合。这个接口是非常基础且重要的,因为它允许开发者以一致的方式遍历任何实现了该接口的集合,无论是数组、列表、自定义集合还是LINQ查询的结果。IEnumerable 接口定义在 System.Collections.Generic 命名空间中,并且只有一个方法 GetEnumerator(),该方法返回一个 IEnumerator 类型的对象,用于遍历集合中的元素。csharp。

杰西笔记 5014

Office 365中的Assigned Access详细功能介绍

本文系统介绍了Office365中AssignedAccess功能的应用与管理。作为Windows系统的重要安全特性,AssignedAccess可将设备锁定为单应用模式,有效防范未授权访问。文章详细阐述了其核心功能、技术架构及配置方法,包括UWP/Win32应用支持、多用户配置、与AzureAD集成等。通过MicrosoftEndpointManager可实现批量部署和远程监控,适用于公共终端、零售设备等场景。该功能为企业数字化转型提供了安全、可控的终端管理方案,在保障数据安全的同时优化用户体验。

xueyunshengling的博客 227

STM32F407驱动OV2640摄像头全栈解析:DCMI+DMA+SCCB协同设计

图像采集是嵌入式视觉系统的基石,其核心在于传感器与MCU间的数据通路构建。原理上需理解并行接口(如DCMI)的硬件同步捕获机制、串行控制总线(如SCCB/I²C)的寄存器级配置逻辑,以及DMA在高吞吐数据搬运中的关键作用。技术价值体现在解放CPU、保障实时性、降低功耗,并支撑JPEG压缩与RGB565直显等差异化应用。典型场景包括智能终端实时预览、低带宽图像上传、工业现场视频监控及教学实验平台搭建。本文以STM32F407与OV2640集成实践为载体,深入剖析DCMI时序约束、SCCB软件模拟实现及DMA循

weixin_36151775的博客 180

IEnumerable和IEnumerable<T>

IEnumerable有两个接口形式,非泛型的IEnumerable在System.Collections中,泛型的IEnumerable<T>在System.Collections.Generic中。 IEnumerable<T>由于是强类型对象,因此使用对象成员比较方便, IEnumerable是弱类型对象,作为虚参可以适应更多的对象,然后可以使用Cast<T>()和OfType<T>()的扩展方法转换为强类型集合。 曾经写过一个函数, void

hans_yu的博客 1635

这才是 Python 的正确玩法!用强化学习 (RL) 训练 AI 玩《王者荣耀》,胜率 90%!

大家打排位时,一定遇到过那种“意识神级、操作零失误”的对手,或者“走位呆滞、送人头”的队友。以前的“人机”是程序员写死的脚本(If 血量<20% Then 回城)。而现在的顶级 AI(如腾讯绝悟、OpenAI Five),是靠强化学习 (Reinforcement Learning)自己“左右互搏”练出来的。今天,我们不谈枯燥的数学公式,我将手把手教你用,搭建一个能玩 MOBA 游戏的 AI Agent。即使不能去 KPL 打职业,虐一下钻石局还是绰绰有余的!

BUG猿的博客 1182

C# IEnumerable<T>介绍

IEnumerable 只有一个方法,即 GetEnumerator,该方法返回一个 IEnumerator 对象。IEnumerator 对象用于迭代集合,它提供了 MoveNext 方法(用于移动到集合的下一个元素),Current 属性(获取当前元素)和 Reset 方法(将枚举器设置回其初始位置,但这个方法通常不会被实现或使用)。IEnumerable 是 C# 中的一个接口,它是 .NET Framework 中的集合类型的基础。接口的一部分,它返回一个。方法会被调用,然后返回的。

琅嬛福地 2287

微信小程序:errno: 600001, errMsg: “uploadFile:fail errcode:-101 cronet_error_code:-10001 error_msg:net::E

微信小程序报错uploadFile:fail errcode:-101 cronet_error_code:-10001 error_msg:net::ERR_CONNECTION_RESET, custum ip is invalid, didn't find user's ip,wx.uploadFile errno: 600001 errcode:-101 ?微信小程序wx.uploadFile错误,wx.uploadFile 在真机上报下面的错误,调试工具里没有问题,其它接口在真机/调试工具都正常,

✅ 精选推荐文章 4260

[AI工具评测] 为什么功能全面的 Kimi Claw,最终还是被放弃?

《KimiClaw:功能整合与体验落差的AI工具实践》 KimiClaw作为集LLM、Agent、云端执行和SaaS分发于一体的AI工具,理论上具备个人开发者所需的全栈能力:原生整合大模型与Agent、支持云端Docker部署、可生成Web应用并通过飞书协作。然而实际高频使用中暴露三大核心问题:响应延迟导致思考节奏断裂(非流式输出)、云端黑箱执行缺乏可控性(无法实时干预)、系统稳定性不足(网关和隧道偶发故障)。这些体验落差表明,功能完整性不等于使用高效性——对开发者而言,实时响应、执行透明度和系统可靠性比自

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 536

C#IEnumberable<>

IEnumerable接口定义了一个名为GetEnumerator的方法,该方法返回一个实现了IEnumerator接口的枚举器。IEnumerator接口提供了对集合中元素的访问和操作,它包含了MoveNext、Current和Reset等方法,用于在集合上进行迭代。在C#中,IEnumerable是一个泛型接口,用于表示一个可枚举的集合。在Main方法中,我们创建了一个MyCollection实例,并使用foreach语句遍历集合中的元素并输出到控制台。方法中,我们创建了一个。

ultramand的博客,重生之我在cad上二次开发猛猛敲C#代码~ 2292

基于OpenClaw的自动化文件管理与文档分类系统设计与实现

本文介绍了一种基于OpenClaw的自动化文件管理与文档分类系统。系统采用三层架构设计,包含数据层、逻辑层和应用层,核心组件涵盖文件扫描、处理、分类、移动等功能。技术选型上使用Python/FastAPI作为后端,结合PostgreSQL/Elasticsearch/MinIO存储方案,并整合scikit-learn/PyTorch等AI技术实现智能分类。系统实现了文件递归扫描、增量扫描、元数据提取等功能,通过文件哈希和修改时间检测变化。该方案能有效提升文件管理效率,实现文档的自动化分类与智能管理。

一键难忘的博客 755

IEnumerable和IEnumerable T接口

IEnumerable和IEnumerable接口 IEnumerable和IEnumerable接口在.NET中是非常重要的接口,它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简单迭代,IEnumerable和IEnumerable接口是.NET Framework中最基本的集合访问器,这两个接口对于LINQ的理解是非常重要的。在面向对象的开发过程中,常常需要创建若干对象

mengyulove的专栏 755

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEnumerator,IEnumerable,IEnumerable<T>

1接口IEnumerator,IEnumerable区别 IEnumerable是一个声明式的接口,声明实现该接口的类就是“可迭代的enumerable”,但并没用说明如何实现迭代器(iterator).其代码实现为: publicinterfaceIEnumerable { IEnumeratorGetE...

weixin_34258078的博客 100

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IEnumerable, IEnumerator

IEnumerator:提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current返回的是object类型。IEnumerable: 暴露一个IEnumerator,支持在普通集合中的遍历。IEnumerator<T>:继承自IEnumerator,有Current属性,返回的是T类型。IEnumerable<T>:继承自IEnu...

weixin_33797791的博客 147

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

关于IEnumerable 是否应该继承IEnumerable(老外讨论的很多)

关于IEnumerable 是否应该继承IEnumerable,老外讨论的很多! http://blogs.msdn.com/brada/archive/2005/01/18/355755.aspx http://morganchengmo.spaces.live.com/blog/cns!9950CE918939932E!1458.entry Should IE

微创社(MCC) 1428

C#学习笔记(二十三)枚举数和可枚举类型

IEnumerator接口 IEnumerator接口包含3个函数成员:Current、MoveNext以及Reset Current返回序列中当前位置项的属性。 它是只读属性。 它返回object类型的引用,所以可以返回任何类型。 MoveNext是把枚举数位置前进到集合中下一项的方法。 如果有新的位置是有效的,方法返回true。 如果新的位置是无效的...

EngraveSmile的专栏 569

IEnumerable 与 IEnumerable<T>

转自:https://blog.csdn.net/qq_21419015/article/details/80495322 IEnumerable 和IEnumerable<T> 接口在 .NET 中是非常重要的接口,它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简单的迭代,IEnumerable和IEnumerable<T>接口是 .N...

weixin_30849403的博客 413
上一篇: 欧姆龙温控器
下一篇: :Vin7 + IIS7
lianchengzhang
博客等级 码龄18年 22粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值