Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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
C# 如何使用带lambda表达式的委托对数组中的奇数求和_C#_.net - Fatal编程技术网

C# 如何使用带lambda表达式的委托对数组中的奇数求和

C# 如何使用带lambda表达式的委托对数组中的奇数求和,c#,.net,C#,.net,假设我有一个数组 int[] nums = new int[]{2, 4, 5, 7, 9, 8} 如何使用带有lambda表达式的委托对数组中的奇数求和?我可以通过一个for循环来实现这一点,该循环有一个条件来检查这个数字是否是奇数,并轻松地将它们相加。只是想知道是否有任何方法可以通过委托和lambda表达式使代码更短 谢谢使用LINQ的Sum()并检查当前数字是否为奇数: var oddsSum = nums.Sum(x => x % 2 * x); 使用Where()筛选时,会显

假设我有一个数组

int[] nums = new int[]{2, 4, 5, 7, 9, 8}
如何使用带有lambda表达式的委托对数组中的奇数求和?我可以通过一个for循环来实现这一点,该循环有一个条件来检查这个数字是否是奇数,并轻松地将它们相加。只是想知道是否有任何方法可以通过委托和lambda表达式使代码更短

谢谢

使用LINQ的
Sum()
并检查当前数字是否为奇数:

var oddsSum = nums.Sum(x => x % 2 * x);
使用
Where()
筛选时,会显示一个或多个详细信息:

var oddsSum = nums.Where(x => x % 2 == 1).Sum();
我相信这就是你的要求。除非您希望在lambda部分之外创建委托方法,否则在这种情况下,您可以执行以下操作:

        var nums = new int[] {1, 2, 3, 4, 5};
        var del = new Func<int,int>((i) => i % 2 == 0 ? 0 : i);
        var sum = nums.Sum(i => del(i));
var nums=newint[]{1,2,3,4,5};
var del=新函数((i)=>i%2==0?0:i);
var sum=nums.sum(i=>del(i));

var sum=nums.Where(n=>n%2==1.sum()像这样还是你在期待什么?谢谢。有没有不使用linq就可以实现的方法?我想使用类似func delegate的东西来缩短代码。@CrazyCode,但正是LINQ添加了大量使用func委托的API;有一些预先存在的非LINQ API接受委托,但它们更为罕见。。。你通常只是循环<代码>整数和=0;如果(i%2!=0)和+=i,则为foreach(整数i,单位为nums)谢谢。有没有不使用linq就可以实现的方法?我想使用func delegate之类的工具来缩短代码。您希望代码缩短多少?这不是已经很短了吗?
.Sum(n=>n%2*n)
@CrazyCode
委托和linq是两件不同的事情,对吗?
是的,你接受这个linq查询
var res=nums.Sum(n=>n%2*n)并将其写为
var res2=nums.Sum(委托(int n){返回n%2*n;})它变成了一个委托:)@Adrian至少你可以在回答中提到谁创建了最短的代码,-1还不错。谢谢你,史蒂夫。
        var nums = new int[] {1, 2, 3, 4, 5};
        var del = new Func<int,int>((i) => i % 2 == 0 ? 0 : i);
        var sum = nums.Sum(i => del(i));