news 2026/4/3 6:20:26

Vision Studio C#中Lambda表达式、可空类型数据、动态数组ArrayList、List数组的运用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vision Studio C#中Lambda表达式、可空类型数据、动态数组ArrayList、List数组的运用

Lambdan表达式

lambda表达式: 可以让我们定义一个变量接收的一个函数,主要是作为另外一个函数的参数进行使用,具体体现变量和函数体之间使用 =>,所以其他的编程语言称之为箭头函数,但是严谨来说C#没有箭头函数

如果一个函数仅在当前作用域进行使用,可以把函数定义在当前作用域就行

int Sum(int a,int b) { return a + b; } Console.WriteLine(Sum(10,20));

定义一个lambda表达式

方法组成:参数列表、返回值、方法名、方法体

它有三种类型:

第一种 使用Func关键字接收有返回值的lambda表达式
Func<> 方法类型、函数类型
第一个类型 是参数1的类型
第二个类型 是参数2的类型
第三个类型 是返回值的类型

结构组成:


f1 变量名
(a,b)参数类别 不用写类型,多个参数的时候加个 ()
=> 表达式
{ }
方法体
有返回值的添加return 关键字

Func<int, int, int> f1 = (a, b) => { return a + b; }; Console.WriteLine(f1(10,20));//可以通过变量名调用函数

第二种 使用Action关键字接收无返回值的lambda表达式
定义一个字符串参数 无返回值的lambda表达式
如果一个参数的时候可以把()不写
如果函数体只有一句可以把{ }
省略掉

Action<string> f2 = (a) => Console.WriteLine(a); f2("hello word");

第三种 使用Predicate<>关键字接收返回值为bool类型的lambda表达式

Predicate<int> f3 =a => a%2 == 0; Console.WriteLine(f3(3));//false Func<int ,bool >f4 =a => a%3==0; Console.WriteLine(f4(9));//true
/*Func<参数类型 参数类型 返回值类型> f1 =(a,b)=>{return a+b} *可以接收有返回值的lambda表达式 参数个数没有限制、返回值的类型也是没有限制 * *Action<string> f2 = a =>Console.WriteLine(a) *只能接收无返回值的lambda表达式 * *Predicate<int> f3 = a =>a%2==0; *只能接收返回值为bool类型的lambda表达式 * */

lambda具体的使用场景: 最为另外一个函数参数进行使用 数组的查询方法当中使用

int[] ints = { 1, 2, 3, 4, 5, 6, 7, 8, 9, }; Console.WriteLine(Array.Find(ints,a =>a%2==0)); int[] ss = Array.FindAll(ints, v => v % 3 == 0);//找到所有的数组 //第一种遍历数组 for (int i = 0; i < ss.Length; i++) { Console.WriteLine(ss[i]+"----"); } //第二种遍历数组 foreach (var item in ss) { Console.WriteLine(item+"++++++++"); } //第三种遍历数组 Array.ForEach(ss, v => Console.WriteLine(v+"???????")); //where 找到所有满足条件的元素 foreach (var item in ints.Where(v => { return v % 3 == 0; })) { Console.WriteLine(item); }

可空类型数据

空类型是null,引用类型的变量都可以赋值成null

string s = null; int[] ints = null; object o = null;

基本数据类型不能赋值为null的

int a = null;// 报错

如果想让基本数据类型能够赋值为null 可以使用?

int? a = null; // a以后可以等于null 在原先的范围内加一个null赋值范围 a = 100;// a可以再赋值100 // int sum = a + 100; 报错 a是可空类型,但是sum不是可空类型

即想使用可空类型 又想使用基本类型进行运算,可以把可空类型再加一个问号 使用双??

int? b = null; // b可空类型 b = 300; int aa = b ?? 100; // b?? 如果b是null aa的值100, 如果b不是null aa的值300 Console.WriteLine(aa); //300 int? c = null; int d = c ?? 100; Console.WriteLine(d);//100 c = 999; int sum = (c ?? 100) + 200; Console.WriteLine(sum);// 1199

动态数组ArrayList

Arraylist:

动态数组一个不固定长度的数组集合,并且可以存储不用类型的元素,例如一个arrayList对象可以存储整形、字符串、对象、数组等
但是int[]这种数组一旦创建好之后 不能后续添加元素 也就是长度他是固定的 并且一个数组对只能存储一种类型的元素

弊端

ArrayList 弊端: 取出元素是一个object类型 必须对其再进行类型转换

使用动态数组ArrayList

第一步先创建一个arrayList对象

int[] ints = new int[] { 1, 2, 3 }; People p1 = new People() { Name="张三" }; ArrayList arr = new ArrayList() { 1, 2, 3,"李四",true,ints,p1 };//这句话是初始化添加的元素

第二步取出元素 通过索引值取元素 arr[i]

//int aa =arr[0];//数组取出的元素是object类型 如果想转成其他类型 必须强制转换一下 Console.WriteLine(Convert.ToInt32(arr[1]));

第三步添加元素

arr.Add(1); arr.Add("王五");//添加一个元素 arr.AddRange(ints);//也可以添加一个数组

第四步删除元素

arr.Remove("王五");//删除他这个指定的元素 arr.RemoveAt(0); //删除指定位置的元素 //arr.RemoveRange(0,3); //从指定参数1位置开始删除下面参数个数的元素

第五步修改元素

arr[1] = 48;

第六步数组排序

arr.Sort();//默认升序排序

第七步indexOf() 元素的索引值

Console.WriteLine(arr.IndexOf(48));

第八步count 获取数组的个数

Console.WriteLine(arr.Count);

第九步Reverse() 把数组里面的元素进行倒序

arr.Reverse();

第十步toArray() 把ArrayList转成Array(int[])

object[] i1 = arr.ToArray();

ArrayList 类: arr 对象

查询可以查询一个arr[1],查询多个for遍历
最后算法遍历元素
如果数组元素类型不一样遍历的时候把类型改成object

foreach (object i in arr) { Console.WriteLine(i+"---------"); }

List数组

ArrayList 动态数组 存储元素类型object类型 取出的时候转成对应的类型,类型不安全

List: 方法和ArrayList很像 区别在于list可以指定类型进行存储,存储同一种类型数据,取出时候不用强制转换,保证数据类型安全

创建一个List的集合对象

List<int> list = new List<int>();//创建一个集合对象

1 添加元素

list.Add(1); list.Add(2); list.Add(3); list.AddRange(new int[] { 9, 10, 11 });//添加多个数

2 删除

list.Remove(11);//删除指定元素 list.RemoveAt(list.Count - 1);//删除指定位置的元素 list.RemoveAll(v => v % 3 == 0);//删除满足条件对的所有的元素

3 修改

list[0] = 20;

4 插入数据

list.Insert(1, 10);//在索引值为1的地方插入888

5 IndexOf() 获取元素的索引值

Console.WriteLine(list.IndexOf(888));

6 遍历

foreach (int i in list) { Console.WriteLine(i+""); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 3:54:24

前端——前端路由守卫与权限验证实战

路由守卫是实现页面访问控制的重要手段&#xff0c;结合权限系统可以实现精细化的访问控制。 1 全局前置守卫 // 路由守卫 router.beforeEach(async (to, from, next) > {// 检查是否需要认证if (to.meta.requiresAuth) {const isAuthenticated store.getters.isAuthentica…

作者头像 李华
网站建设 2026/3/31 21:22:16

Java GC是任意时候都能进行的吗?

大家好&#xff0c;我是锋哥。今天分享关于【Java GC是任意时候都能进行的吗&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring IoCJava GC是任意时候都能进行的吗&#xff1f; 超硬核AI学习资料&#xff0c;现在永久免费了&#xff01; 不是的&#xff0c;Java 的…

作者头像 李华
网站建设 2026/4/3 4:41:13

测试平台出问题?看我20分钟快速定位!

今天遇到一个问题&#xff0c;感觉挺有意思&#xff0c;处理过程也非常有意义&#xff0c;希望能给大家一个借鉴吧。今天一位小姐姐找到了我们大组长&#xff0c;说测试平台添加自动化测试用例失败&#xff0c;之后我们组长把我拉到了一个群里让我去看一下&#xff0c;硬着头皮…

作者头像 李华
网站建设 2026/4/2 13:54:51

C#数组操作全攻略:引用测试与查询方法

第九次一&#xff0c;数组的引用测试和属性方法1&#xff0c; 数组的引用测试int[] ints new int[] {1,2,3}; int[] ints2 ints; //赋值关系 ints[0] 999; Console.WriteLine(ints2[0]); Console.WriteLine(ints[0]);2&#xff0c;方法传递时候对数组引用测试int[] ints3 n…

作者头像 李华
网站建设 2026/4/1 0:43:02

科学休息,DevFish插件1.0.3版本再更新

1、前言 继11.4《科学休息&#xff0c;我用AI写了个vscode养鱼插件&#xff1a;DevFish发布》的插件发布后&#xff0c;2周时间还是有不少小伙伴下载安装了&#xff0c;安装量也是有点超出我的意料之外&#xff0c;原本只是写着玩玩的。于是乎&#xff0c;我今天心血来潮&#…

作者头像 李华