49、c# 能⽤foreach 遍历访问的对象需满足什么条件?
在 C# 中,要使用 foreach 循环遍历一个对象,该对象必须满足以下条件之一:
1. 实现 IEnumerable 或 IEnumerable 接口
- 非泛型版本:System.Collections.IEnumerable
public class MyCollection : IEnumerable
{private int[] _data = { 1, 2, 3 };public IEnumerator GetEnumerator(){return _data.GetEnumerator();}
}
- 泛型版本:System.Collections.Generic.IEnumerable(推荐)
public class MyCollection<T> : IEnumerable<T>
{private List<T> _data = new List<T>();public IEnumerator<T> GetEnumerator(){return _data.GetEnumerator();}IEnumerator IEnumerable.GetEnumerator() // 显式实现非泛型接口{return GetEnumerator();}
}
2. 提供 GetEnumerator() 方法的公共非泛型实现
- 如果类没有显式实现 IEnumerable,但提供了返回 IEnumerator 的公共方法,foreach 仍可工作:
public class MyCollection
{private int[] _data = { 1, 2, 3 };public IEnumerator GetEnumerator(){return _data.GetEnumerator();}
}
3. 使用 yield return 自动生成枚举器
- 编译器会自动为包含 yield return 的方法生成 IEnumerable 实现:
public class MyCollection
{public IEnumerable<int> GetItems(){yield return 1;yield return 2;}
}// 使用时:
foreach (var item in new MyCollection().GetItems()) { ... }
4. 数组或字符串(语言内置支持)
- 数组和字符串即使未显式实现接口,也能直接用 foreach 遍历(编译器特殊处理):
int[] array = { 1, 2, 3 };
foreach (int num in array) { ... } // 合法string str = "hello";
foreach (char c in str) { ... } // 合法
关键点总结
- 必须:对象需提供 GetEnumerator() 方法(通过接口或显式实现)。
- 推荐:优先使用泛型接口 IEnumerable 以获得类型安全和性能优势。
- 例外:数组和字符串是语言内置的特殊类型。
示例:完整泛型实现
using System.Collections.Generic;public class MyList<T> : IEnumerable<T>
{private List<T> _items = new List<T>();public void Add(T item) => _items.Add(item);public IEnumerator<T> GetEnumerator() => _items.GetEnumerator();System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()=> GetEnumerator();
}// 使用:
var list = new MyList<int>();
list.Add(1);
list.Add(2);
foreach (var item in list) { ... } // 正常遍历
通过满足上述条件,任何自定义对象都可以使用 foreach 遍历。
相关文章:
49、c# 能⽤foreach 遍历访问的对象需满足什么条件?
在 C# 中,要使用 foreach 循环遍历一个对象,该对象必须满足以下条件之一: 1. 实现 IEnumerable 或 IEnumerable 接口 非泛型版本:System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…...
DL00987-基于深度学习YOLOv11的红外鸟类目标检测含完整数据集
提升科研能力,精准识别红外鸟类目标! 完整代码数据集见文末 针对科研人员,尤其是研究生们,是否在鸟类目标检测中遇到过数据不够精准、处理困难等问题?现在,我们为你提供一款基于深度学习YOLOv11的红外鸟类…...
07 接口自动化-用例管理框架之pytest单元测试框架
文章目录 一、pytest用例管理框架(单元测试框架)二、pytest简介三、pytest的最基本的测试用例的规则四、运行方式1.主函数方式2.命令行方式3.通过pytest.ini的配置文件运行 五、pytest 默认执行测试用例的顺序六、跳过测试用例1.无条件跳过 pytest.mark.…...
Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中
Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中 在 Flutter 中,build 方法被设计在 StatefulWidget 的 State 类中而非 StatefulWidget 类本身,这种设计基于几个重要的架构原则和实际考量: 1. 核心设计原因 1.1 生命周期管理…...
多技术栈 iOS 项目的性能调试实战:从 Flutter 到 Unity(含 KeyMob 工具实测)
多技术栈 iOS 项目的性能调试实战:从 Flutter 到 Unity 随着移动端开发日趋多元化,iOS 项目中纯 Objective-C/Swift 已不再是唯一选择。越来越多团队采用 Flutter、React Native、Unity、WebView 混合等方案构建 App。这种“技术栈混合”带来灵活性的同…...
Base64加密解密
Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式,常用于需要通过文本协议传输二进制数据的场景(如 URL、邮件)。以下是不同场景下生成 Base64 编码的方法: 一、编程语言实现 Python import base64# 字符串转Base…...
程序设计基础----排序(2)
1、冒泡排序 #include <stdio.h>#define N 1000 int arr[N];/* 对长度为n的数组arr执行冒泡排序 */ void bubbleSort(int arr[], int n);/* 打印长度为n的数组arr */ void printArray(int arr[], int n);void swap(int *xp, int *yp) {int temp *xp;*xp *yp;*yp temp…...
C++:vector容器
vector容器与array容器相似,但vector容器是动态的,可以自动扩容。 使用方法和一些注意如下: #include<iostream> #include<vector> using namespace std;int main() {vector<char> vec { a,b,c,d };vec[4] e;//不能以此…...
十四、Hive 视图 Lateral View
作者:IvanCodes 日期:2025年5月20日 专栏:Hive教程 在Hive中,我们经常需要以不同于原始表结构的方式查看或处理数据。为了简化复杂查询、提供数据抽象,以及处理复杂数据类型(如数组或Map)&#…...
Frp Dockr Mysql内网映射
用 FRP 远程暴露 Mac mini 上的 Docker-MySQL(含 Ubuntu frps 安装和 macOS 客户端配置) 一、环境说明 服务器(公网):Ubuntu 22.04 frps内网设备:macOS (Mac mini) frpc Docker MySQL目标:…...
PHP 扇形的面积(Area of a Circular Sector)
圆形扇区或圆形扇区是圆盘上由两个半径和一个圆弧围成的部分,其中较小的区域称为小扇区,较大的区域称为大扇区。让我们看看这个图,试着找出扇区: 在该图中,绿色阴影部分是扇形,“r”是半径,“th…...
物业后勤小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的物业后勤小程序源码,它为物业管理提供了高效便捷的解决方案。 该源码功能丰富,涵盖房屋认证、家人认证,保障社区居住安全;支持报事报修、装修申请,方便业主与物业沟通;还…...
git基础操作
当远程仓库迁移到一个新的组下面时,你需要在本地仓库中更新远程仓库的URL,以便与新的远程仓库关联。以下是详细步骤: 获取新的远程仓库URL: 首先,你需要从GitLab或相关平台获取新组下的仓库的新URL。通常,仓…...
鸿蒙HarmonyOS 【ArkTS组件】通用属性-背景设置
📑往期推文全新看点(附带最新鸿蒙全栈学习笔记) 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选? 分享一场鸿蒙开发面试经验记录(三面…...
java 在用redis 的时候,如何合理的处理分页问题? redis应当如何存储性能最佳
在 Java 中使用 Redis 处理用户表分页时,需结合其数据结构特性优化存储和查询 1. 数据结构设计 场景需求 用户表字段:id, name, age, register_time(注册时间)分页要求:按注册时间倒序分页展示,每页 10 条…...
分类预测 | Matlab实现PNN概率神经网络多特征分类预测
分类预测 | Matlab实现PNN概率神经网络多特征分类预测 目录 分类预测 | Matlab实现PNN概率神经网络多特征分类预测分类效果代码功能算法流程程序设计参考资料分类效果 代码功能 该代码实现了一个基于**概率神经网络(PNN)**的多分类任务,核心功能如下: 数据预处理 读取Exce…...
spring-retry
学习链接 【SpringBoot】spring-retry(重试机制) 【Spring】Spring Retry CSDN有点可恶啊,拿着别人的文章,要开VIP才能看...
RTMP协议解析【二】
文章目录 RTMP协议解析【二】RTMP消息消息的格式Basic HeaderMessage HeaderExtended Timestamp RTMP协议解析【二】 本专栏重点负责介绍RTMP协议的理论部分, 跳过定义,协议与其他协议的优缺点对比,协议的拓展与改进,协议的历史发…...
WebGL2混合与雾
混合技术 一、混合基本技术 混合技术就是将两个片元调和,主要通过各种测试将准备进入帧缓冲(源片元)与帧缓冲中原有片元(目标片元)按照设定的比例加权计算出最终片元的颜色值 。 两种常用 组合 : 源因子…...
Windows Docker笔记-扩展
docker扩展知识点 开放容器端口 背景,有一个docker Centos7镜像,运行容器后,想要通过22端口远程这个容器 创建容器时开放映射端口,将容器的22端口映射到本地的22端口 docker run -p <宿主机端口>:<容器端口> 镜像名…...
【C++ Primer 学习札记】智能指针
1)std::unique_ptr(独占所有权) 特点: 独占资源的所有权,同一时间只能有一个 unique_ptr 指向特定对象。 不可复制,但可以通过 std::move 转移所有权。 轻量级,几乎无额外开销(与…...
【嵌入式人工智能产品开发实战】(二十二)—— 政安晨:改造小智AI开发智能体硬件(案例:移植PowerManager后麦克风不工作)
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 目录 确定你硬件的关键点 案例分析 🔍 一、关键代码分析 ✅ 1. power_save_…...
Taro Error: chunk common [mini-css-extract-plugin]
目录 一、问题描述 二、解决方案 一、问题描述 taro项目编译时抛出一下异常: Error: chunk common [mini-css-extract-plugin] Conflicting order. Following module has been added: * css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].oneOf…...
【深度学习】多目标融合算法(六):渐进式分层提取模型PLE(Progressive Layered Extraction)
目录 一、引言 二、PLE(Progressive Layered Extraction,渐进式分层提取模型) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一…...
ping、tcpping、psping、paping、hping的区别
ping、tcpping、psping、paping、hping的区别 这些工具都是用于网络测试的,但它们在功能和协议上有所不同,适用于不同的场景。 ping 基本功能: 发送ICMP echo请求包,并等待接收echo应答包,从而判断网络是否连通&…...
【Redis8】最新安装版与手动运行版
1. 下载 Redis 百度网盘 2. 解压后直接运行 redis-server.exe 3. 使用安装版 双击 install_redis_service.bat 输入安装路径(请提前创建好安装路径)后直接回车下一步直接回车即可,因为是使用配置模板文件为默认解压出来的,然后…...
前端(小程序)学习笔记(CLASS 1):组件
1、小程序中组件的分类 小程序中的组件也是由宿主环境提供的,开发者可以基于组件快速搭建出漂亮的页面结构。官方把小程序的组件分为了9大类,分别是: * 视图容器,* 基础内容,* 表单组件,* 导航组件 媒体…...
Python MD5加密算法脚本
基本概念 MD5(Message Digest Algorithm 5)是一种常用的哈希函数,用于将任意长度的数据转换为固定长度的哈希值,通常为128位(16字节)。 特点 不可逆性:无法从哈希值还原出原始数据。无论原始…...
Python数据分析实战:Pandas高效处理Excel数据指南
目录 引言:为什么选择Pandas处理Excel? 一、环境搭建与数据读取 1.1 基础环境配置 1.2 数据高效载入技巧 二、数据清洗核心战术 三、数据加工实战案例 3.1 销售数据透视分析 3.2 异常值检测 3.3 跨表关联分析 四、性能优化秘籍 4.1 大文件处理…...
使用Starrocks制作拉链表
5月1日向ods_order_info插入3条数据: CREATE TABLE ods_order_info(dt string,id string COMMENT 订单编号,total_amount decimal(10,2) COMMENT 订单金额 ) PRIMARY KEY(dt, id) PARTITION BY (dt) DISTRIBUTED BY HASH(id) PROPERTIES ( "replication_num&q…...
【npm】npm命令大全
掌握 NPM:前端与 Node.js 开发者必备命令大全 NPM (Node Package Manager) 无疑是现代 JavaScript 开发的基石。无论是前端项目还是 Node.js 后端服务,NPM 都扮演着管理依赖、执行脚本、发布模块等关键角色。熟悉并熟练使用 NPM 命令,能够极…...
最新版Chrome浏览器调用ActiveX控件技术——alWebPlugin中间件V2.0.42版发布
allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…...
32核64G内存的物理机上,Netty理论能承载多少连接?
在 32核64G内存 的机器上,Netty 能承载的连接数取决于 业务场景、配置优化 和 操作系统调优。 以下是详细分析和实测数据参考: 1. 理论估算(基于资源限制) 资源影响内存每个连接占用 10KB~1MB(取决于业务࿰…...
对于final、finally和finalize不一样的理解
目录 1、final 1.1、不可变性(Immutability) 1.2、内存可见性(Visibility) 1.3、初始化安全(Initialization Safety) 1.4、禁止重排序(Reordering) 1、静态常量 2、实例常量 …...
Open CASCADE学习|刚体沿曲线运动实现方法
在三维几何建模中,刚体沿参数化曲线的运动模拟是机械运动仿真、机器人路径规划等领域的核心需求。本文基于Open Cascade几何内核,系统阐述刚体沿曲线运动的实现方法,重点解析标架构建、坐标变换及鲁棒性控制等关键技术。 一、基于标架的刚体运…...
工作流引擎-03-聊一聊什么是流程引擎(Process Engine)?
前言 大家好,我是老马。 最近想设计一款审批系统,于是了解一下关于流程引擎的知识。 下面是一些的流程引擎相关资料。 工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#x…...
centos7 p8p1使用ip addr查看时有的时候有两个ip,有的时候只有一个ip,有一个ip快,有一个ip慢
在CentOS 7系统中,网络接口 p8p1 出现IP地址数量变化且访问速度不一致的问题,通常与以下原因相关。以下是逐步排查与解决方案: 1. 检查网络配置文件 可能原因:存在多个配置文件或重复配置(如静态IP与DHCP冲突…...
回溯算法——排列篇
目录 一、全排列 二、全排列II 一、全排列 46. 全排列 - 力扣(LeetCode) class Solution {List<List<Integer>> resultnew ArrayList<>();LinkedList<Integer> pathnew LinkedList<>();boolean[] used;public List<…...
Unity中SRP Batcher使用整理
SRP Batcher 是一种绘制调用优化,可显著提高使用 SRP 的应用程序的性能,SRP Batcher 减少了Unity为使用相同着色器变体的材质准备和调度绘制调用所需的CPU 时间。 工作原理: 传统优化方法通过减少绘制调用次数提升性能,而SRP Batcher的核心理念在于降低绘制调用间的渲染状…...
【JAVA学习】泛型
传统方法不能对加入到集合ArrayList中的数据类型进行约束,遍历的时候需要进行类型转换,如果集合中的数据量较大,对效率有影响。泛型又称参数化类型,是JDK5.0出现的新特性,解决数据类型的安全性问题,在类声明…...
实验分享|基于千眼狼sCMOS科学相机的流式细胞仪细胞核成像实验
实验背景 流式细胞仪与微流控技术,为细胞及细胞核成像提供新的路径。传统流式细胞仪在细胞核成像检测方面存在检测通量低,荧光信号微弱等局限,故某光学重点实验室开发一种基于高灵敏度sCMOS科学相机并集成在自组荧光显微镜的微流控细胞核成像…...
MySQL中的JSON_CONTAINS函数用法
MySQL中的JSON_CONTAINS函数用于检查一个JSON文档(目标)是否包含另一个JSON文档(搜索值)。以下是其详细用法: 函数语法 JSON_CONTAINS(target_json, search_json [, path]) target_json:要检查的目…...
如何在 Windows 11 或 10 上将 DNS 更改为 Cloudflare提供的 DNS 服务
域名解析服务(DNS)对于互联网来说至关重要,因为它使我们能够轻松地通过在浏览器中输入域名来访问网站。DNS 的作用是将域名解析为 IP 地址;你可以将其视为互联网上的电话簿。这是因为互联网上的计算机或服务器是通过 IPv4 或 IPv6(数字格式)来识别的,然而,要用户去记住…...
解除diffusers库的prompt长度限制(SDXL版)
2025-5-21 注:本文只提供思路,没有解决“权重识别”、“BREAK”问题。 要想实现与webui一样的绘图效果与无限prompt,可参考diffusers/examples/community/lpw_stable_diffusion_xl.py 1、上代码 from diffusers import StableDiffusionXLP…...
RISC-V 开发板 MUSE Pi Pro CSI测试,一把点亮ov5647摄像头
视频讲解: RISC-V 开发板 MUSE Pi Pro CSI测试,一把点亮ov5647摄像头 手上正好有一颗ov5674,看了下接口排线都是一致的,硬件条件满足的情况下,剩下的就是驱动软件的问题,直接接上CSI排线 https://bianbu-li…...
Word2Vec模型学习和Word2Vec提取相似文本体验
文章目录 说明Word2Vec模型核心思想两种经典模型关键技术和算法流程优点和局限应用场景 Word2Vec提取相似文本完整源码执行结果 说明 本文适用于初学者,体验Pytorch框架在自然语言处理中的使用。简单了解学习Word2Vec模型,体验其使用。 Word2Vec模型 …...
[测试_3] 生命周期 | Bug级别 | 测试流程 | 思考
目录 一、软件测试的生命周期(重点) 1、软件测试 & 软件开发生命周期 (1)需求分析 (2)测试计划 (3)测试设计与开发 (4)测试执行 (5&am…...
epoll_wait未触发的小Bug
上次看了一下epoll监听的原理,在Android Jni里使用epoll,来监听Gpio口的变化事件,具体代码如下: 打开 GPIO 文件描述符,因为该文件是内核虚拟出来的,不是实际文件,所以无法使用FileObserver来监…...
Unity异步加载image的材质后,未正确显示的问题
简述: 此问题涉及到Unity的UI刷新机制 问题描述: 如图所示,想要实现在打开新的界面时候,通过修改材质的方式,修改image的显示内容。 明明已经给image添加上材质了,可还是一片空白? 先看看代…...
Python----循环神经网络(Word2Vec)
一、Word2Vec Word2Vec是word to vector的简称,字面上理解就是把文字向量化,也就是词嵌入 的一种方式。 它的核心就是建立一个简单的神经网络实现词嵌入。 其模型仅仅包括输入层、隐藏层和输出层,模型框架根据输入输出的不同,主要…...