c# List<Tuple<string, double>> Foreach in one liner

c# List<Tuple<string, double>> Foreach in one liner

我想要以下代码:

List<Tuple<string, double>> historicalDailyHigh = new List<Tuple<string, double>>();

  foreach (var item in historicalDailyHigh)
                {
                    if (item.Item1.Contains(closestPreDailyHigh.ToString()))
                    {
                        closestPreDailyHighName = item.Item1;
                    }
                }

写在一行中,和这行类似,只是"closestPreDailyHighName"应该是一个字符串:

closestPreDailyHighName = historicalDailyHigh.Any(x => x.Item1.Contains(closestPreDailyHigh.ToString()));

有人可以告诉我怎么做吗?

从技术上讲,您的代码可以重写为

 closestPreDailyHighName = historicalDailyHigh
    .LastOrDefault(item => item.Item1.Contains(closestPreDailyHigh.ToString()))
   ?.Item1 ?? closestPreDailyHighName;

请注意,您不要将 break 放在 if 中,这就是将分配满足条件的 last 项。如果 item 的 none 满足条件,我们不更改 closestPreDailyHighName

如果省略 break 打字错误 ,您可以输入

 closestPreDailyHighName = historicalDailyHigh
    .FirstOrDefault(item => item.Item1.Contains(closestPreDailyHigh.ToString()))
   ?.Item1 ?? closestPreDailyHighName; 

并且如果 保证 item 始终存在,您可以将 FirstOrDefault 更改为 First:

 closestPreDailyHighName = historicalDailyHigh
    .First(item => item.Item1.Contains(closestPreDailyHigh.ToString()))
    .Item1; 

我的解决方案现在看起来像这样:

closestPreDailyHigh = historicalDailyHigh.Min(x => x.Item2);
closestPreDailyHighName = historicalDailyHigh.First(x => x.Item1.Contains(closestPreDailyHigh.ToString())).Item1;

感谢您的意见!