定义泛型集合:
List<string> list=new List<string> { "a","ab","abc","abcdef" }; //lambda表达式 => goes to,m代表集合集合中每一个的元素 //where 根据条件去筛选 List<string> result= list.Where(m=>m.Length>3).ToList(); foreach(var item in result) { Conole.WriteLine(item); //输出abcdef }
简化:省略了ToList();
foreach(var item in list.where(m=>m.Length>3)) { Console.WriteLine(item); //输出abcdef }
关于C#中的var,首先要区分一点的是这里的var和js中的var不太一样,js中的var是一个弱类型
而C#中的var你给它赋了一个什么样类型的值它就会识别出你是什么样的数据类型。
例如:
var a=12; //var相当于识别你是int var b="a"; //var相当于 string var c=new Object(); //var相当于 object //另外当var成功识别后,再去重复赋值,就会报错 a="";//报错无法识别
first()和firstOrDefault()
list.first(m=>m.Contains("w")); //该集合会先去找在集合中根据条件是否存在其元素,如果有会输出集合中第一个位置的该元素,如果没有w字符串出现,使用first会报错
可以通过list.Any()判断其是否至少满足一个元素,避免报错内容
if(list.Any(m=>m.Contains("w"))) //如果存在返回true,否则false { Console.WriteLine("暂无数据!"); } else { Console.WriteLine(list.First(m=>m.Contains("w"))); }
firstOrDefault():
//FirstOrDefault()相比First()不会出现明显报错,如果找不到元素,则返回默认值。 list.FirstOrDefault(m=>m.Contains("w")); //输出空
与Any相对于的All()
All()//用来判断集合中所有元素是否都满足 list.All(m=>m.Length>1); //true list.All(m=>m.Length>6); //false
Take(n):获取集合中前n个元素
foreach(var item in list.Take(2)) { Console.WriteLine(item); //输出a,ab }
Skip(n):获取忽略前n个元素后剩下的所有元素:
foreach(var item in list.Skip(2).Take(2)) { Console.WriteLine(item); //输出abc,abcdef }
写一个学生类:
class Student() { public int Id; public string Name; public int Age; }
初始化:
List<Student> stu=new List<Student> { new Student{Id=1,Name="张三",Age=12}, new Student{Id=3,Name="张三3",Age=13}, new Student{Id=5,Name="张三5",Age=15}, new Student{Id=6,Name="张三6",Age=66}, new Student{Id=8,Name="张三8",Age=88}, }
1.筛选出青少年中年龄最大的(30以下属于青少年)
var stu=stu.Where(m=>m.Age<30).OrderByDescending(m=>m.Age).First();
Console.WriteLine($"id={stu.Id} Name={stu.Name} Age={stu.Age}"); //输出 id=5 Name=张三5 Age=15;