Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ中的C#新表达式_C#_Linq_Sum - Fatal编程技术网

LINQ中的C#新表达式

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

我写了一个代码,并使用LINQ来显示奇偶数之和。我的代码运行良好,但我觉得我可以做得更好

点击查看图片

        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更快,因为您要检查两次数字。它可以减慢速度。