C#foreach语句概念及使用浅析

开发 后端
C# foreach语句是从Visual Basic的for each演变过来的,Visual Basic的程序员应该不会感到陌生,但是C# foreach语句对于C#的初学者,我们还是要看看具体的使用规则和注意事项。

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

  1. foreach(type identifier in expression)embedded-statement 

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

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

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

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

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

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

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

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

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

  1. using System;  
  2. using System.Collections;  
  3. class Test  
  4. {  
  5.   public static void Main()  
  6.   {  
  7.     Console.WriteLine("See the prime number:");  
  8.     foreach(MyInt x in Prime)  
  9.        Console.WriteLine("{0}",x);  
  10.   }  

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

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

C# foreach语句的基本概念以及格式就向你介绍到这里,希望对你了解和学习使用C# foreach语句有所帮助。

【编辑推荐】

  1. C#入门之C#特点浅析
  2. C#和.NET Framework浅谈
  3. .NET Framework详解之内存机制
  4. 详解基于C#的.NET Framework
  5. C#foreach语句使用体会
责任编辑:仲衡 来源: chinaitlab
相关推荐

2009-08-27 10:33:28

C# foreach

2009-08-27 09:49:10

C# foreach语

2009-08-27 11:27:58

foreach语句C# foreach语

2009-08-27 11:12:04

C# foreach

2009-08-24 15:28:19

C# 泛型方法

2009-09-09 16:46:59

C# XmlSeria

2009-09-04 16:37:37

C# DES算法

2009-08-20 18:47:19

C#异步通信

2009-08-18 09:51:18

C#枚举类型

2009-08-25 18:16:02

.NET Framew.NET Framew

2009-08-24 17:39:21

C# 泛型集合

2009-09-01 16:10:28

C#单元测试

2009-07-31 09:32:04

ASP.NET缓存概念ASP.NET缓存应用

2009-07-03 18:26:11

Servlet过滤器

2010-08-30 14:27:06

CSS样式表

2009-09-11 11:16:53

C# Attribut

2011-08-10 13:24:46

SQL Server

2010-02-03 16:29:19

C++ sizeof

2009-07-31 18:39:31

C#中foreach引

2009-09-14 13:44:14

Lambda ExprC# Lambda
点赞
收藏

51CTO技术栈公众号