我试图用linq简化一个语句,该语句接受2个数字列表并从第二个数字中减去第一个数字

sco*_*foy 4 .net c# linq performance

我正在尝试简化,使用linq,并希望更便宜,一个声明,需要2个数字列表,并从第二个减去第一个.我有一些有用的东西,但我认为它可以更清洁,更有效.

double[] main = _mainPower.Select(i => i.Decibels).ToArray();
double[] reference = _referencePower.Select(i => i.Decibels).ToArray();

List<double> amplitudeList = new List<double>();
for (int i = 0; i < main.Count(); i++)
{
     if (!double.IsNaN(main[i] - reference[i]))
     {
          amplitudeList.Add(main[i] - reference[i]);
     }
}

 return amplitudeList;
Run Code Online (Sandbox Code Playgroud)

如果我有2个列表List1 = {8,5,3}和List2 = {5,2,1},返回的列表将是{3,3,2}我试过

return _mainPower.Select(i => i.Decibels - _referencePower.Select(a => a.Decibels));
Run Code Online (Sandbox Code Playgroud)

但它显然不起作用.有没有办法把我的功能变成一个很好的linq查询?我不允许的一件事是列表是2种不同的大小.如果尺寸不同,则应从末尾修剪较长的列表,使其与较小的列表相同.

任何帮助,将不胜感激.

谢谢,

- 编辑 -

感谢您的帮助,我使用了StriplingWarrior的帖子来获得我需要的东西.

_mainPower.Zip(_referencePower, (v1, v2) => v1.Decibels - v2.Decibels).Where(i => !double.IsNaN(i));
Run Code Online (Sandbox Code Playgroud)

Str*_*ior 5

这应该做:

return _mainPower.Zip(_referencePower,(v1, v2) => v1-v2)
Run Code Online (Sandbox Code Playgroud)