快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

亚博国际首页登入:C中foreach基础使用方法



昨天做师长教师的网站功课。要对一些工具做添加改动删除处置惩罚。其余倒没什么,删除时呈现了点问题似的。

由于是从一个类的聚拢中删除掉落一个元素。这样就要遍历全部聚拢,而foreach恰是为遍历筹备亚博国际首页登入的新玩意。自然而然用上了。于是代码类似如下:

string temp = name.Text; // 从TextBox中读出数据

foreach (LCo亚博国际首页登入urse 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:TESTVS..C#testfor亚博国际首页登入eachProgram.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,未将工具引用设置到工具的实例。

3.便是像开首测试的例子,稍有篡改,移除后不用break跳出

List myString = new List();

myString.Add("ab");

myString.Add("cd");

foreach (string s in myString)

{

myString.Remove(s);

}

编译经由过程了,但运行时抛出非常,InvalidOperationException,聚拢已改动;可能无法履行罗列操作。

经由过程上面三个测试例子和开首的实际例子,我貌似看到了foreach的某种器械。

第一,不能改动的是foreach引用变量,由于它是引用的,对它的改动没故意义也没有感化,它亚博国际首页登入就像一个c/c++指针那样对聚拢中的元素进行指向引用;我们能经由过程引用看到它,然则没有能力动它。

第二,in之前的变量是引用变量,但in之后的聚拢确是实其着实的,以是可以对它操作,像.ADD();REMOVE()等措施可以应用。

第三,foreach引用变量大年夜概是经由过程地址指向后面的聚拢(我猜想跟c/c++的指针很像),当改动了聚拢的元素时,地址可能发生某种改变,以是不跳出轮回继承遍历时,就可能呈现引用找不到的环境。

着末,大概说的不精准,但这便是我理解的整个了。首先表扬下自己这样的思路和精神,至于技巧深度,大年夜概没什么。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: