前言
在对MoreLinq库梳理的过程中学习到的一些知识点的整理。
morelinq是对Linq to object的有力补充,国外有本书《Thinking in LINQ》专门花了一章的篇幅介绍了它,它的开发者也是《C# in Depth》作者。
1. 数字指定小数位数/有效位数/取整整数不足补零
//数字指定小数位数/有效位数/取整整数不足补零
void ToStringWithFixedNum()
{
var f = 12.123456;
f.ToString("F3").Dump();//12.123
f.ToString("G3").Dump();//12.1
f.ToString("000", CultureInfo.InvariantCulture).Dump();//012
//字符串复合格式设置
String.Format("0x{0:X} {0:E} {0:N}",Int64.MaxValue);
//0x7FFFFFFFFFFFFFFF 9.223372E+018 9,223,372,036,854,775,807.00
}
对数字进行展示时经常会有特殊处理,特别是小数,所以使用一些ToString的方法会很方便。CultureInfo是对地域的选择,更多信息可查看官方解释CultureInfo 类。若有更多格式设置,可查看符合格式设置,以便满足更多个性化ToString设置。
2. 两个可遍历集合的复合操作
比较常用的是求和
void AggregateLambda()
{
var i = Enumerable.Range(0, 26);
var a = Enumerable.Range(0, 26).Select(a => (char)('a' + a));
var zipAggregate = i.Zip(a, (us, them) => (Us: us, Them: them)).Aggregate(0, (x, y) => x + y.Us);
zipAggregate.Dump();//325
}
此案例展示了Linq的Zip用法,而且返回了一个命名的ValueTuple,对ValueTuple的灵活使用可简化代码,并减少对对象的依赖,使用Aggregate将两个数组进行转换操作。
3. is type pattern
void IsTypeExpression()
{
ArrayList al = new ArrayList() { 0, 1, 'a', "b" };
StringBuilder res = new StringBuilder();
foreach (var a in al)
{
if (a is { } ai and not string and not char and not 0)
{
res.Append("\t");
res.Append(a);
}
}
res.ToString().Trim().Dump();//1
}
is not 模式是在c#9 版本中引入的,可简化对对象的判断,使书写更语义化。
4. OfType<T>
void OfTypeFunc()
{
ArrayList al = new ArrayList() { 0, 1, 'a', "b" };
var ai = al.OfType<int>();
ai.Aggregate((x, y) => x + y).Dump("OfType");//1
}
使用OfType<T>对ArrayList进行类型过滤。
系列文章,敬请期待后续。
本文作者:wwmin
微信公众号: DotNet技术说
本文链接:https://www.jianshu.com/p/f517aa872275
关于博主:评论和私信会在第一时间回复。或者[直接私信]我。
版权声明:转载请注明出处!
声援博主:如果您觉得文章对您有帮助,关注点赞, 您的鼓励是博主的最大动力!
网友评论