Ch5泛型与LINQ习题解答1.假设Node类的每一个节点包括有两个字段:m_data(引用节点的数据)和m_next(引用链接列表中的下一项),这两个字段都是由构造函数方法设置的。该类有两个功能,第1个功能是通过名为Data和Next的只读属性访问m_data和m_next字段,第2个功能是对System.Object的ToString虚拟方法进行重写。试分别用类和泛型两种方法编写程序实现上述功能。【解答】usingSystem;classNode{Objectm_data;Nodem_next;publicNode(Objectdata,Nodenext){m_data=data;m_next=next;}//访问结点数据publicObjectData{get{returnm_data;}}//访问下一个结点publicNodeNext{get{returnm_next;}}//获取结点数据描述publicoverrideStringToString(){returnm_data.ToString();}}第5章泛型和LINQ//链表结点类的泛型定义classNode{Tm_data;Nodem_next;publicNode(Tdata,Nodenext){m_data=data;m_next=next;}//访问结点数据publicTData{get{returnm_data;}set{m_data=value;}}//访问下一个结点publicNodeNext{get{returnm_next;}set{m_next=value;}}//获取结点数据描述publicoverrideStringToString(){returnm_data.ToString();}}//使用结点类型或泛型结点类型classLinkedList{staticvoidMain(string[]args){////创建整数链表//Nodehead=newNode(5,null);//head=newNode(10,head);//head=newNode(15,head);////遍历链表求整数和//Int32sum=0;//for(Nodecurrent=head;current!=null;第5章泛型和LINQ//current=current.Next)//{//sum+=(Int32)current.Data;//}////输出结果//Console.WriteLine("Sumofnodes={0}",sum);//用泛型创建整数链表Nodehead=newNode(5,null);head=newNode(10,head);head=newNode(15,head);//遍历求和Int32sum=0;for(Nodecurrent=head;current!=null;current=current.Next){sum+=current.Data;}//输出Console.WriteLine("Sumofnodes={0}",sum.ToString());}}2.编写程序创建一个的排序列表,向其添加5个元素后,按逆序方式显示列表中每一项的value值(string类型的值).【解答】usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication{classProgram{staticvoidMain(string[]args){SortedListlist=newSortedList();list.Add(10,"str10");list.Add(2,"str2");list.Add(13,"str13");list.Add(24,"str24");第5章泛型和LINQlist.Add(15,"str15");for(inti=list.Keys.Count-1;i>=0;i--){Console.WriteLine(list[list.Keys[i]]);}Console.ReadLine();}}}3.使用LINQ查询有哪些优势?什么是LINQ的延迟执行和立即执行?【解答】LINQ是一组查询技术的统称。其主要思想是将各种查询功能直接集成到C#语言中,不论是对象、XML还是数据库,都可以用C#语法编写查询语句。换言之,利用LINQ查询数据源就像用C#使用类、方法、属性和事件一样,完全用C#语法来构造,并具有完全的类型检查和智能提示(IntelliSense)支持。LINQ执行查询时,一般利用foreach循环执行查询得到一个序列,这种方式称为“延迟执行”对于聚合函数,如Count、Max、Average、First,由于返回的只是一个值,这类查询在内部使用foreach循环实现,而开发人员只需要调用LINQ提供的对应方法即可,这种方式称为“立即执行”。4.创建一个List列表,向列表中添加10个元素,分别使用LINQ、lambda表达式两种方式查找列表中的偶数,并在控制台输出。【解答】usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication{classProgram{staticvoidMain(string[]args){第5章泛型和LINQListintList=newList{1,2,3,4,5,6,7,8,9,10};Console.WriteLine("使用LINQ查询列表:");varquery1=fromtinintListwheret%2==0selectt;foreach(varminquery1)Console.Write(m+"");Console.WriteLine();Console.WriteLine("使用Lamdam查询列表:");varquery2=intList.Where(x=>x%2==0);foreach(varm1inquery2)Console.Write(m1+"");Console.ReadLine();}}}