zoukankan      html  css  js  c++  java
  • C# foreach语句使用体会

    C# foreach语句的学习对于C#初学者,经常会出现对语句的把握不准确的情况。下面的示例就是使用C# foreach语句中出现的错误,以及从中找出错误然后总结出foreach语句的使用方法的过程,希望对你学习C# foreach语句有所帮助。

        C# foreach语句示例说明:

        要对集合中的内容进行增删改的操作,那么就是要遍历集合,那么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是个什么东西?

        C# 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,未将对象引用设置到对象的实例。

        3.就是像开头测试的例子,稍有改动,移除后不用break跳出

          List myString = new List(); 

          myString.Add("ab");  

          myString.Add("cd");  

          foreach (string s in myString)  

          {  

             myString.Remove(s);  

           } 

        编译通过了,但运行时抛出异常,InvalidOperationException,集合已修改;可能无法执行枚举操作。

        通过上面三个测试例子和开头的实际例子,其实就是说明了C# foreach语句的某种东西。

        第一,不能修改的是foreach引用变量,因为它是引用的,对它的修改没有意义也没有作用,它就像一个c/c++指针那样对集合中的元素进行指向引用;我们能通过引用看到它,但是没有能力动它。

        第二,in之前的变量是引用变量,但in之后的集合确是实实在在的,所以可以对它操作,像.ADD();REMOVE()等方法可以使用。

        第三,foreach引用变量大概是通过地址指向后面的集合(我猜想跟c/c++的指针很像),当修改了集合的元素时,地址可能发生某种改变,所以不跳出循环继续遍历时,就可能出现引用找不到的情况。

        最后,以上就是一点C# foreach语句的使用体会,说的不精准,但希望对你了解和学习C# foreach语句有所帮助。

  • 相关阅读:
    overflow+文档流
    《大器晚成》读后感 读书笔记
    《指标陷阱》读后感 读书笔记
    《无限的游戏》读后感 读书笔记
    《最蓝的眼睛》读后感 读书笔记
    《正常人》读后感 读书笔记
    《玉米人》读后感 读书笔记
    《科举史》读后感 读书笔记
    《糖的故事》读后感 读书笔记
    《蒙克传》读后感 读书笔记
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/1817272.html
Copyright © 2011-2022 走看看