NET 6 中新增的LINQ 方法

NET 6 中新增的LINQ 方法
微软太给力了NET5 LINQ很多功能点还没用到NET6 LINQ 新功能就到来了 而且 NET6 有些功能确实很贴切列如:

Chunk
TryGetNonEnumeratedCount
Zip
ElementAt
MaxBy
MinBy
DistinctBy
ExceptBy
IntersectBy
UnionBy
FirstOrDefault
LastOrDefault
SingleOrDefault
Take


Chunk 该方法将序列的元素拆分为指定大小的区块

st<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var newNames=names.Chunk(3);
foreach (var name in newNames)
{
  Console.WriteLine(String.Join(",",name));
}
Console.ReadKey();

 

TryGetNonEnumeratedCount 该方法尝试在不强制枚举的情况下获取可枚举的源的计数

List<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
int num = 0;
names.TryGetNonEnumeratedCount(out num);
Console.WriteLine(num);
Console.ReadKey();

 

Zip该方法将两个数组进行整合成为一个 ValueTuple<T,SecondT>数组

List<string> names1 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射" };
List<string> names2 = new List<string>() { "红薯","王初冬", "呵呵", "裴南苇" };
var names=names1.Zip(names2);
Console.WriteLine(String.Join(",", names));
Console.ReadKey();


ElementAt 该方法返回元素指定索引或者结束的索引

List<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var index1=names.ElementAt(3);
var index2=names.ElementAt(^3);
Console.WriteLine(index1);
Console.WriteLine(index2);
Console.ReadKey();


MaxBy 该方法放回数组或是列表中的最大值

List<int> numbers = new List<int>() { 100,99,5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
var maxnum= numbers.MaxBy(x => x);
Console.WriteLine(result);
Console.ReadKey();

MinBy该方法放回数组或是列表中的最小值

List<int> numbers = new List<int>() { 100, 99, 5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
var result = numbers.MinBy(x => x);
Console.WriteLine(result);
Console.ReadKey();

 

DistinctBy该方法根据某元素去重(可以自定义元素属性去重)

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇", "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result = names.DistinctBy(x => x);
Console.WriteLine(String.Join(",",result));
Console.ReadKey();

ExceptBy该方法返回 两个序列的元素的集合差值的序列

List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
List<string> names3 = new List<string>();
var names = names2.ExceptBy(names1, names1 => names1);
Console.WriteLine(names);

IntersectBy 该方法返回两个序列元素 得交集

List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
List<string> names3 = new List<string>();
var names = names2.IntersectBy(names1, names1 => names1);
Console.WriteLine(String.Join(" ", names));

UnionBy该方法连接不同集合,过滤某元素相同项

List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
List<string> names3 = new List<string>();
var names = names2.UnionBy(names1, names1 => names1);
Console.WriteLine(String.Join(" ", names));

FirstOrDefault该方法返回序列中满足条件的第一个元素;如果未找到这样的元素,则返回默认值

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result=names.FirstOrDefault(x=>x.Contains("人屠"),"凤年");
Console.WriteLine(result);

LastOrDefault该方法返回序列中的最后一个元素;如果未找到该元素,则返回默认值

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result = names.LastOrDefault(x => x.Contains("人屠"), "呵呵");
Console.WriteLine(result);

SingleOrDefault 该方法返回序列中的唯一元素;如果该序列为空,则返回默认值;如果该序列包含多个元素,此方法将引发异常。

string[] strName = { "凤年" };

string[] strNameEmpty = { };

string[] strEmpty = { "凤年", "姜泥" };
try
{
  string tempName = strName.SingleOrDefault();
  Console.WriteLine("SingleOrDefault()第一种 返回序列中的唯一记录。");
  Console.WriteLine("信息为:{0}", tempName);

  string tempNameEmpty = strNameEmpty.SingleOrDefault();
  Console.WriteLine("SingleOrDefault()第二种 如果该序列为空,则返回默认值。");
  Console.WriteLine("信息为:{0}", tempNameEmpty);

  string tempEmpty = strEmpty.SingleOrDefault();
}
catch (Exception ex)
{
  Console.WriteLine("SingleOrDefault()第三种 如果该序列包含多个元素,则引发异常。");
  Console.WriteLine("信息为:{0}", ex.Message);
}

Take 该方法 从序列的开头返回指定数量的相邻元素

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result = names.Take(3);
Console.WriteLine(String.Join(",",result.ToList()));
Console.ReadKey();

#总结 以上就是NET6 更新的常用方法

posted @   燕过留痕  阅读(156)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示