接下来,学习了委托以后,我们来看看集合常用的扩展方法,里面的很多扩展方法支持委托的使用
声明一个整形数组
int[] nums = { 1, 24, 35, 3, 423, 432, 24 };
Where(支持委托)
IEnumerable<int> data = nums.Where(a => a > 400);
Select(支持委托)
IEnumerable<int> data= nums.Select(p => p*2);
First(获取第一个,如果一个都没有则异常)
//int data = nums.First();
//没有数据怎么办
int[] nums2 = { };
int data = nums2.First();//System.InvalidOperationException:“序列不包含任何元素” 会抛出异常
FirstOrDefault(获取第一个,如果一个都没有则返回默认值)
int data = nums.FirstOrDefault();//1
int data = nums2.FirstOrDefault();//0 如果一个元素都没有,则返回对应类型的默认值.
string[] str1 = { };//如果是string数组,那么值是多少呢
string data = str1.FirstOrDefault();//为null
Console.WriteLine(data);
Single (获取唯一一个值,没有或者多个值抛异常)
int[] nums2 = { 1 };
int[] nums3 = { };
//Console.WriteLine(nums.Single());//System.InvalidOperationException:“序列包含一个以上的元素”
//Console.WriteLine(nums2.Single());//1
Console.WriteLine(nums3.Single());//System.InvalidOperationException:“序列不包含任何元素”
SingleOrDefault (获取唯一一个,如果没有则返回默认值,如果有多个则异常)
int[] nums2 = { 1 };
int[] nums3 = { };
//Console.WriteLine(nums.SingleOrDefault());//System.InvalidOperationException:“序列包含一个以上的元素”
//Console.WriteLine(nums2.SingleOrDefault());//1
Console.WriteLine(nums3.SingleOrDefault());//0
OrderBy( 按根据某个键按升序对序列的元素进行排序。)
IEnumerable<int> data = nums.OrderBy(s => s);
foreach (var item in data)
{
Console.WriteLine(item);
}
ToArray( 创建一个数组,从 System.Collections.Generic.IEnumerable`1。
)
int[] newData = data.ToArray();
ToList(创建 System.Collections.Generic.List`1 从 System.Collections.Generic.IEnumerable`1。)
还有Max,Min,Sum这些扩展方法
因为这些扩展方法返回类型都是IEnumerable的,所以可以连续进行调用
比如
int data = nums.OrderBy(s => s).Sum();
int data2 = nums.OrderBy(s => s).Min();
int data3 = nums.OrderBy(s => s).Max();
最后的完整代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 常用扩展方法
{
class Program
{
static void Main(string[] args)
{
int[] nums = { 1, 24, 35, 3, 423, 432, 24 };
//IEnumerable<int> data = nums.Where(a => a > 400);
//IEnumerable<int> data= nums.Select(p => p*2);
//foreach (var item in data)
//{
// Console.WriteLine(item);
//}
//int data = nums.First();
//没有数据怎么办
//int[] nums2 = { };//1
// int data = nums2.First();//System.InvalidOperationException:“序列不包含任何元素” 会抛出异常
//int data = nums.FirstOrDefault();//1
//int data = nums2.FirstOrDefault();//0 如果一个元素都没有,则返回对应类型的默认值.
//string[] str1 = { };//如果是string数组,那么值是多少呢
//string data = str1.FirstOrDefault();//为null
//Console.WriteLine(data);
//int[] nums2 = { 1 };
//int[] nums3 = { };
Console.WriteLine(nums.Single());//System.InvalidOperationException:“序列包含一个以上的元素”
Console.WriteLine(nums2.Single());//1
//Console.WriteLine(nums3.Single());//System.InvalidOperationException:“序列不包含任何元素”
//int[] nums2 = { 1 };
//int[] nums3 = { };
//Console.WriteLine(nums.SingleOrDefault());//System.InvalidOperationException:“序列包含一个以上的元素”
//Console.WriteLine(nums2.SingleOrDefault());//1
/* Console.WriteLine(nums3.SingleOrDefault());*///0
/*
1
3
24
24
35
423
432
*/
//IEnumerable<int> data = nums.OrderBy(s => s);
int data = nums.OrderBy(s => s).Sum();
int data2 = nums.OrderBy(s => s).Min();
int data3 = nums.OrderBy(s => s).Max();
Console.WriteLine(data);//942
//int[] newData = data.ToArray();
//List<int> list = newData.ToList();
//foreach (var item in data)
//{
// Console.WriteLine(item);
//}
Console.ReadKey();
}
}
}
---本博客是学习以后记录知识,如有侵权,请联系删除!!!