浅析C#中foreach的用法

引子

昨天做老师的网站作业。要对一些对象做添加修改删除处理。别的倒没什么,删除时出现了点问题似的。

因为是从一个类的集合中删除掉一个元素。这样就要遍历整个集合,而foreach正是为遍历准备的新玩意。自然而然用上了。于是代码类似如下:

string temp = name.Text; // 从TextBox中读出数据
foreach (LCourse cou in Data.myCourse) // 在List中遍历
{
if (cou.name == temp) // 判断cou的名字匹配
{
Data.myCourse.Remove(cou); // 匹配的即为要删除的,从列表中去除
break; // 跳出循环
}
}

很容易就想到这么用foreach,貌似也没错误。但是印象中关于foreach的注意点就是只适用于遍历读取,不能修改。上边的代码却删除成功。这样,矛盾的种子就种在了心里,到底foreach是个什么东西?

过程:

看了MSDN文档,可是文档里的示例用到时都是遍历读取每个元素,所以帮助不大。相关测试,异常,编译错误反倒有很大用处。

过程细节和总结:

1.自定义整型数组然后遍历修改

foreach(int myint in myArray)
{ myint+=8;}

错误:“myint”是一个“foreach 迭代变量”,无法为它赋值G:\TEST\VS..C#\testforeach\Program.cs 15 27 testforeach

2.自定义类,在类中定义函数对私有成员进行操作,然后遍历类对象并调用函数

public class MyClass // 自定义的测试类
{
private int i = 0;
public void change()
{
i = 98;
}
public override string ToString()
{
return i.ToString();
}
}
MyClass[] myTest = new MyClass[10]; // 测试代码片段
foreach (MyClass mc in myTest)
{
mc.change();
Console.WriteLine(mc.ToString());
}

通过了编译,但是抛出异常,NullRefferenceException,未将对象引用设置到对象的实例。

时间: 2024-10-02 11:31:01

浅析C#中foreach的用法的相关文章

浅析java中stringBuilder的用法_java

String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类.例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能. 通过用一个重载的构造函数方法初始化变量,可以创建 Strin

浅析JavaScript中this的用法

真正去解释this这个东西的时候,才发现不是这么简单,花了一些时间,写了几个小demo,让我们来一探究竟.恩,以人为镜,可知得失,看来这句话是很有道理的. 如果是一个全局的function,则this相当于window对象,在function里定义的各种属性或者方法可以在function外部访问到,前提是这个function需要被调用.  代码如下 复制代码 <script type="text/javascript">         //在function中使用this

PHP中foreach()用法汇总_php技巧

PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误.有两种语法,第二种比较次要但却是第一种的有用的扩展. foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement 第一种格式遍历给定的 array_express

详解PHP中foreach的用法和实例_php技巧

在PHP中经常会用到foreach的使用,而要用到foreach,就必须用到数组.因此,在这篇文章中,我们一边讲数组,一边讲foreach. foreach有两种语法: 第一种:遍历给定的 数组语句 array_expression 数组.每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元). foreach (array_expression as $value) 第二种:同上,同时当前单元的键名也会在每次循环中被赋给变量 $key.

浅析java 的 static 关键字用法_java

本篇浅析java中static的用法,主要五个方面:静态成员变量,静态方法,静态块,静态内部类,静态导包. 首先还是一张表格说一下静态对象和非静态对象的区别: 静态对象 非静态对象 归属 类共同具有 类的各个实例独立拥有 内存分配 内存空间上固定的 附属类分配 分配空间顺序 优先分配静态对象空间 优先分配静态对象空间,初始化也一样 1 静态变量,静态方法,静态块 静态对象,静态方法都是在原对象和方法上加上static关键字修饰,表示类可以直接调用这些,而不需要实例化后再调用.具有的好处是: 1-

PHP中foreach()用法汇总

  这篇文章主要给大家详细介绍了PHP中foreach()用法以及相关的示例,十分的细致,有需要的小伙伴可以参考下. PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误.有两种语法,第二种比较次要但却是第一种的有用的扩展. ? 1 2 3 4 5foreach (array_expression as $value) statement foreach (

.NET中的枚举用法浅析_实用技巧

本文简单分析了.NET中的枚举用法.分享给大家供大家参考.具体分析如下: 我理解的枚举就是编程中约定的一个"可选值":例如QQ的在线状态,分别有    在线,Q我吧,隐身,忙碌等等...我觉得这就是一个枚举. 1.普通枚举 1) 实例 复制代码 代码如下: public enum UserState {  QMe,  OnLine,  OffLine     //后面省略 } ps:像上边的枚举,可以单独写在一个CS文件中. 2)普通枚举的性质 1. 互斥性 2. 每一个值都有一个数值

浅析Java中的set集合类型及其接口的用法_java

概念首先,我们看看Set集合. (01) Set 是继承于Collection的接口.它是一个不允许有重复元素的集合. (02) AbstractSet 是一个抽象类,它继承于AbstractCollection,AbstractCollection实现了Set中的绝大部分函数,为Set的实现类提供了便利. (03) HastSet 和 TreeSet 是Set的两个实现类.     HashSet依赖于HashMap,它实际上是通过HashMap实现的.HashSet中的元素是无序的.    

浅析Python中yield关键词的作用与用法_python

前言 为了理解yield是什么,首先要明白生成器(generator)是什么,在讲生成器之前先说说迭代器(iterator),当创建一个列表(list)时,你可以逐个的读取每一项,这就叫做迭代(iteration). >>> mylist = [1, 2, 3] >>> for i in mylist : ... print(i) 1 2 3 mylist 是一个可迭代的对象.当使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代的对象: >>>