微软太给力了NET5 LINQ很多功能点还没用到NET6 LINQ 新功能就到来了 而且 NET6 有些功能确实很贴切列如:
Chunk TryGetNonEnumeratedCount Zip ElementAt MaxBy MinBy DistinctBy ExceptBy IntersectBy UnionBy FirstOrDefault LastOrDefault SingleOrDefault Take Chunkchunk 该方法将序列的元素拆分为指定大小的区块
stTryGetNonEnumeratedCountnames = new List () {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; var newNames=names.Chunk(3); foreach (var name in newNames) { Console.WriteLine(String.Join(",",name)); } Console.ReadKey();
TryGetNonEnumeratedCount该方法尝试在不强制枚举的情况下获取可枚举的源的计数
ListZipnames = new List () {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; int num = 0; names.TryGetNonEnumeratedCount(out num); Console.WriteLine(num); Console.ReadKey();
Zip该方法将两个数组进行整合成为一个 ValueTuple
ListElementAtnames1 = new List () { "凤年", "陆丞燕", "姜泥", "南宫仆射" }; List names2 = new List () { "红薯","王初冬", "呵呵", "裴南苇" }; var names=names1.Zip(names2); Console.WriteLine(String.Join(",", names)); Console.ReadKey();
ElementAt 该方法返回元素指定索引或者结束的索引
ListMaxBynames = new List () {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; var index1=names.ElementAt(3); var index2=names.ElementAt(^3); Console.WriteLine(index1); Console.WriteLine(index2); Console.ReadKey();
MaxBy该方法放回数组或是列表中的最大值
Listnames = new List () { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; var result = names.MaxBy(x=>x); Console.WriteLine(result); Console.ReadKey();
名字可能效果不是很好下面使用数字来表示效果好点
ListMinBynumbers = new List () { 100,99,5, 4, 1, 3, 9, 8, 6, 7, 12, 10 }; var maxnum= numbers.MaxBy(x => x);
MinBy该方法放回数组或是列表中的最小值
ListDistinctBynumbers = new List () { 100, 99, 5, 4, 1, 3, 9, 8, 6, 7, 12, 10 }; var result = numbers.MinBy(x => x); Console.WriteLine(result); Console.ReadKey();
DistinctBy该方法根据某元素去重(可以自定义元素属性去重)
ListExceptBynames = new List () { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇", "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; var result = names.DistinctBy(x => x); Console.WriteLine(String.Join(",",result)); Console.ReadKey();
ExceptBy该方法返回 两个序列的元素的集合差值的序列
ListIntersectBynames1 = new List () { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" }; List names2 = new List () { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; List names3 = new List (); var names = names2.ExceptBy(names1, names1 => names1); Console.WriteLine(names); Console.ReadKey();
IntersectBy 该方法返回两个序列元素 得交际
ListUnionBynames1 = new List () { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" }; List names2 = new List () { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; List names3 = new List (); var names = names2.IntersectBy(names1, names1 => names1); Console.WriteLine(String.Join(" ", names)); Console.ReadKey();
UnionBy该方法连接不同集合,过滤某元素相同项
ListFirstOrDefaultnames1 = new List () { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" }; List names2 = new List () { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; List names3 = new List (); var names = names2.UnionBy(names1, names1 => names1); Console.WriteLine(String.Join(" ", names)); Console.ReadKey();
FirstOrDefault该方法返回序列中满足条件的第一个元素;如果未找到这样的元素,则返回默认值
ListLastOrDefaultnames = new List () { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; var result=names.FirstOrDefault(x=>x.Contains("人屠"),"凤年"); Console.WriteLine(result); Console.ReadKey();
LastOrDefault该方法返回序列中的最后一个元素;如果未找到该元素,则返回默认值
ListSingleOrDefaultnames = new List () { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; var result = names.LastOrDefault(x => x.Contains("人屠"), "呵呵"); Console.WriteLine(result); Console.ReadKey();
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);
}
SingleOrDefault
TakeTake 该方法 从序列的开头返回指定数量的相邻元素
Listnames = new List () { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" }; var result = names.Take(3); Console.WriteLine(String.Join(",",result.ToList())); Console.ReadKey();
#总结 以上就是NET6 更新的常用方法,完整代码如下
#region 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);
}
#endregion
#region Task
//List names = new List() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result = names.Take(3);
//Console.WriteLine(String.Join(",",result.ToList()));
//Console.ReadKey();
#endregion
#region FirstOrDefault
//List names = new List() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result = names.LastOrDefault(x => x.Contains("人屠"), "呵呵");
//Console.WriteLine(result);
//Console.ReadKey();
#endregion
#region FirstOrDefault
//List names = new List() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result=names.FirstOrDefault(x=>x.Contains("人屠"),"凤年");
//Console.WriteLine(result);
//Console.ReadKey();
#endregion
#region ExceptBy
//List names1 = new List() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
//List names2 = new List() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//List names3 = new List();
//var names = names2.UnionBy(names1, names1 => names1);
//Console.WriteLine(String.Join(" ", names));
//Console.ReadKey();
#endregion
#region ExceptBy
//List names1 = new List() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
//List names2 = new List() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//List names3 = new List();
//var names = names2.IntersectBy(names1, names1 => names1);
//Console.WriteLine(String.Join(" ", names));
//Console.ReadKey();
#endregion
#region ExceptBy
//List names1 = new List() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
//List names2 = new List() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//List names3 = new List();
//var names = names2.ExceptBy(names1, names1 => names1);
//Console.WriteLine(String.Join(" ",names));
//Console.ReadKey();
#endregion
#region DistinctBy
//List names = new List() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇", "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result = names.DistinctBy(x => x);
//Console.WriteLine(String.Join(",",result));
//Console.ReadKey();
#endregion
#region MaxBy
//List names = new List() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result = names.MaxBy(x=>x);
//Console.WriteLine(result);
//Console.ReadKey();
#endregion
#region MinBy
//List numbers = new List() { 100, 99, 5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
//var result = numbers.MinBy(x => x);
//Console.WriteLine(result);
//Console.ReadKey();
#endregion
#region ElementAt
//List names = new List() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var index1=names.ElementAt(3);
//var index2=names.ElementAt(^3);
//Console.WriteLine(index1);
//Console.WriteLine(index2);
//Console.ReadKey();
#endregion
#region Zip
//List names1 = new List() { "凤年", "陆丞燕", "姜泥", "南宫仆射" };
//List names2 = new List() { "红薯","王初冬", "呵呵", "裴南苇" };
//var names=names1.Zip(names2);
//Console.WriteLine(String.Join(",", names));
//Console.ReadKey();
#endregion
#region TryGetNonEnumeratedCount
//List names = new List() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//int num = 0;
//names.TryGetNonEnumeratedCount(out num);
//Console.WriteLine(num);
//Console.ReadKey();
#endregion
#region Chunk
//List names = new List() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var newNames=names.Chunk(3);
//foreach (var name in newNames)
//{
// Console.WriteLine(String.Join(",",name));
//}
//Console.ReadKey();
//var names = new[] { "Tom", "Jack", "Kate" };
//var other_names = new[] { "Lily", "Aaron", "Eric" };
//var concated = names.Concat(other_names);
这样做会有什么不好的地方。(IO? Cpu?)
//Console.WriteLine(concated.Count());
#endregion



