LINQ中的C#新表达式
我写了一个代码,并使用LINQ来显示奇偶数之和。我的代码运行良好,但我觉得我可以做得更好 点击查看图片LINQ中的C#新表达式,c#,linq,sum,C#,Linq,Sum,我写了一个代码,并使用LINQ来显示奇偶数之和。我的代码运行良好,但我觉得我可以做得更好 点击查看图片 static void Main(string[] args) { Func<int, int, IEnumerable<int>> NumberRange = (startPoint, endPoint) => Enumerable .Range(M
static void Main(string[] args)
{
Func<int, int, IEnumerable<int>> NumberRange =
(startPoint, endPoint) =>
Enumerable
.Range(Math.Min(startPoint, endPoint), Math.Abs(startPoint - endPoint) + 1);
Func<double, double, bool> IsDivisible =
(value, divisor) =>
(value % divisor)
.Equals(0);
Action<IEnumerable<object>> DisplayItems =
(data) =>
{
Console
.WriteLine(String.Join(Environment.NewLine, data.Select(n => n)));
};
Func<bool, string> GetState =
(key) =>
key.Equals(true) ? "even" : "odd";
var query =
NumberRange(1, 20)
.GroupBy(item => IsDivisible(item, 2))
.Select(group => new
{
Type = GetState(group.Key),
Sum = group.Sum()
})
.Select(group => new
{
Output = string.Format("Sum of {0} numbers is {1}", group.Type, group.Sum)
}
.Output
);
DisplayItems(query);
Console
.Read();
}
static void Main(字符串[]args)
{
函数数排列=
(起点、终点)=>
可枚举
.Range(Math.Min(起点,终点),Math.Abs(起点-终点)+1);
Func是可分的=
(值、除数)=>
(值%除数)
.等于(0);
动作显示项=
(数据)=>
{
安慰
.WriteLine(String.Join(Environment.NewLine,data.Select(n=>n));
};
Func GetState=
(键)=>
key.Equals(真)?“偶数”:“奇数”;
变量查询=
数字排列(1,20)
.GroupBy(项目=>IsDivisible(项目2))
.选择(组=>新建
{
类型=GetState(group.Key),
Sum=group.Sum()
})
.选择(组=>新建
{
Output=string.Format(“{0}个数之和为{1}”、group.Type、group.Sum)
}
.产出
);
显示项目(查询);
安慰
.Read();
}
新表达式是否有任何优化?谢谢。试试这个,它更简单:
static void Main(string[] args)
{
int startPoint = 0, endPoint = 20;
List<int> data = new List<int>();
int i = startPoint;
while (i <= endPoint)
{
data.Add(i);
i++;
}
Console.WriteLine(string.Format("Sum of even numbers is {0} \r\n", data.Where(x => x % 2 == 0).Sum().ToString()));
Console.WriteLine(string.Format("Sum of odd numbers is {0} \r\n", data.Where(x => x % 2 != 0).Sum().ToString()));
Console.ReadLine();
}
static void Main(字符串[]args)
{
int起始点=0,终点=20;
列表数据=新列表();
int i=起始点;
而(IX%2==0.Sum().ToString());
Console.WriteLine(string.Format(“奇数之和为{0}\r\n”,data.Where(x=>x%2!=0).Sum().ToString());
Console.ReadLine();
}
我认为简单循环(或简单实用程序函数)比这更容易阅读。这让我觉得“看,我会写linq”int赔率=0;int-evens=0;如果(val%2==0)evens+=val,则为foreach(可枚举范围(1,20)中的var-val);else赔率+=val;同意Eser的观点,Linq在性能方面可能是危险的,明智地使用它。不要做这些函数,而是将所有这些东西放在适当的扩展方法或其他东西中。我用stopwatch Func测试过,它比谓词方法快。我不知道怎么做。谢谢你的建议@Gusman,但我的目标是提高我的LINQ技能。好吧,这很公平,也许你应该改进你的答案,让人们知道你这样做是为了提高你的技能。一个好的优化方法是使用编译后的表达式:我想,GroupBy更快,因为您要检查两次数字。它可以减慢速度。