C#的foreach语句

foreach语句是在C#中新引入的,C和C++中没有这个语句,而Visual Basic的程序员应该对它不会陌生。它表示收集一个集合中的各个元素,并针对各个元素执行内嵌语句。语句的格式为:

foreach(type identifier in expression)embedded-statement

其中类型(type)和标识符(identifier)用来声明循环变量,表达式(expression)对应集合。每执行一次内嵌语句,循环变量就依次取集合中的一个元素代入其中。在这里,循环变量是一个只读型局部变量,如果试图改变它的值或将它作为一个ref或out类型的参数传递,都将引发编译时的错误。

foreach语句中的expresssion必须是集合类型,如果该集合的元素类型与循环变量类型不一致,则必须有一个显示定义的从集合中的元素类型到循环变量元素类型的显式转换。

集合的概念相信大家都不陌生,它表示一组相同或相似的数据项总的描述。那么在C#中,究竟什么样的类型算是集合类型呢?我们从语法上给出集合类型的定义:

●该类型必须支持一个形为Getenumerator()的公有的非静态方法,该方法的返回类型为结构、类或接口。

●形为GetEumerator()的方法返回的结构、类或接口应当包含一个公有的非静态的方法MoveNext(),该方法的返回类型为布尔型。

●形为GetEumerator()的方法返回的结构、类或接口应当包含一个公有的非静态的属性Current,该属性可以读出。

如果一个类型同时满足以上三个条件,该类型称为集合类型。Current属性的类型叫作该集合类型的元素类型。

我们姑且不论集合类型的具体形式,只从foreach语句的使用角度举一个例子。

假设Prime是一个满足条件的集合类型,它的元素类型为0到1000以内的质数。MyInt是我们自定义的一个类型,其范围为200到300之间的整数。下面这段程序用于在屏幕上打印出从200到300以内的所有质数。

程序清单8-5:

using System;
using System.Collections;
class Test
{
  public static void Main()
  {
    Console.WriteLine("See the prime number:");
    foreach(MyInt x in Prime)
       Console.WriteLine("{0}",x);
  }
}

顺便说一句,数组类型是支持foreach语句的,对于一维数组,执行顺序是从下标为0的元素开始,一直到数组的最后一个元素;对于多维数组,元素下标的递增是从最右边那一维开始的,依次类推。

同样,break和continue可以出现在foreach语句中,功能不变。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索变量
, foreach
, 类型
, 语句
, 元素
, c# 方法 foreach
, c数组 循环语句c++
, 一个
, 循环集合
1000以内质数
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-10-31 13:49:06

C#的foreach语句的相关文章

C#巧用foreach语句控制控件

foreach语句用来迭代集合中的每个项目,其语法格式如下: foreach(type identifier in expression) 在本实例中,使用foreach语句实现清空当前窗体上所有TextBox的Text值,同样也可以用foreach语句来控制同一容器中一组相同的控件.这样可以大大的提高程序人员的工作效率.其代码如下: private void clearText() { foreach (Control cont in this.gbLogin.Controls) { if (

C# Foreach语句

foreach语句表示收集一个集合中的各个元素,并针对各个元素执行内嵌语句. 语句的格式为: foreach(type identifier in expression)embedded-statement foreach(元素类型  变量名  in 集合或数组名) {语句} 其中类型(type)和标识符(identifier)用来声明循环变量,表达式(expression)对应集合.每执行一次内嵌语句,循环变量就依次取集合中的一个元素代入其中.在这里,循环变量是一个只读型局部变量,如果试图改变

MyBatis的foreach语句详解_java

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collectio

jstl-c:forEach语句问题,java,web

问题描述 c:forEach语句问题,java,web c:forEach实现循环,里面有一个button,button下有onclick事件,onclick失效.例如: 循环遍历试题显示,试题分页,每页一道题时onclick事件可以触发,但每页多于一道题时点击加入试卷时onclick事件不触发,求问为什么?怎么解决?希望大神有具体的解决方案! 解决方案 但每页多于一道题时点击加入试卷时onclick事件???这句话没太懂啊,我理解是,遍历出来一个页面出现两道题, 你点击其中一道题,加入到考试试

java foreach语句

foreach语法可以不必创建int变量去对由访问项构成的序列进行计数,foreach将自动遍历获得每一项      foreach语法如下 for(变量类型 x : 该变量的序列){        statement } foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本.foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为"foreach"语句.从英文字面意思理解f

错误:foreach语句无法用在方法组上,您是要调用方法组吗?

问题描述 publicRandomAccessRecordcheckInfoRecord(intpoint_num,List<RandomAccessRecord>lstrecord){foreach(RandomAccessRecordrinlstRecord){if(r.Point_num==point_num)returnr;}}RandomAccessRecord是自己写的一个类.提示错误:foreach语句无法用在方法组上您是要调用方法组吗? 解决方案 解决方案二:foreach中不

asp.net c# foreach语句遍历数组(1/3)

foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组.foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用. 备注 -------------------------------------------------------------------------------- 嵌入语句为数组或集合中的每个元素继续执行.当为集合中的所有元素完成迭代后,控制传递给 foreach 块之后的下一个语句. 可以在 foreach 块的任何点使

深入解析PHP中foreach语句控制数组循环的用法_php技巧

foreach是PHP中很常用的一个用作数组循环的控制语句. 因为它的方便和易用,自然也就在后端隐藏着很复杂的具体实现方式(对用户透明) 今天,我们就来一起分析分析,foreach是如何实现数组(对象)的遍历的. 我们知道PHP是一个脚本语言,也就是说,用户编写的PHP代码最终都是会被PHP解释器解释执行, 特别的,对于PHP来说,所有的用户编写的PHP代码,都会被翻译成PHP的虚拟机ZE的虚拟指令(OPCODES)来执行,不论细节的话,就是说,我们所编写的任何PHP脚本,都会最终被翻译成一条条

task中能否嵌套Parallel.foreach语句?

问题描述 业务场景是这样的:一个采集程序需要采集歌手数据,包含6个字段(代表作.专辑.性别.出道日期.国籍.爱好).这6个待采集的数据字段分布在6批不同的网址,每批网址有10w个(就是说一共需要采集60w网址).问题1:为了提高采集速度,我是否应该在程序中开启6个task去执行采集任务,然后在每个task中再使用Parallel.foreach去采集对应的10w个网址?问题2:为了提高采集速度,是否应该为这6个待采集字段建立6个数据表,以免多个线程同时写入一个表导致写入速度慢?谢谢. 解决方案