【问题标题】:How to get the object when called the List<type>.any()调用 List<type>.any() 时如何获取对象
【发布时间】:2021-08-13 03:27:38
【问题描述】:

我有一个'Cpu'类的列表,cpu类是这样的:

public class Cpu
{

     public string SerialNum{get;set;}
     public string BandName{get;set;}
     public string Status{get;set;}
     ...
}

我有一个 Cpus 列表,List cpulist; 我想整理出状态不佳的cpu。所以我使用了如下代码

foreach(Cpu cpu in cpulist) {
      if (cpu.status!='healthy') {
            saveinfo(cpu's information);
      }
}

但我知道一种简单的方法,如下面的代码:

 if (cpulist.Any(cpu => cpu.Status != "Healthy")) {
          //I can find whather a cpu is unhealty
          //but I want to save the unhealty cpu's information,I don't know 
          //which cpu has issues,and **my questions is how to find the specific cpu 
          //with unhealty status**
 }

我的意思是当我调用 List.Any 时如何获取 cpu 对象。

【问题讨论】:

  • cpulist.Where(cpu =&gt; cpu.Status != "Healthy")
  • @JLRishe 哦!感谢您指出了这一点。我正在查看使用 Any 的代码,并认为 OP 想要 any 不健康的 CPU。他们缺乏复数也让我觉得只有一个。现在我重新阅读了这个问题并看到他们对 foreach 循环做了什么,我对 OP 想要什么感到有点困惑。
  • @Sweeper 我同意这很令人困惑,但似乎他们的目标是记录有关所有坏 CPU 的信息(这是 foreach 循环正在做的事情),但他们发现了 LINQ 并希望充分利用它。
  • 非常感谢,我发现这段代码可以用来获取不健康cpus的列表。
  • cpulist.Where(cpu =&gt; !cpu.Status.Equals("Healthy", StringComparison.InvariantCulture)).Select(bad =&gt; new Action(()=&gt; saveinfo(bad))).AsParallel().ForAll(a =&gt; a.Invoke());

标签: c# list


【解决方案1】:

如果集合中至少有一项符合您的条件,Any 方法返回 true,否则返回 false。所以它本身不会返回任何项目。

在您的情况下,您希望对匹配的项目执行操作,因此Any 不是正确的方法。

您可以改用FindAllWhere

FindAllList&lt;T&gt; 的扩展方法,它返回所有匹配项的新List&lt;T&gt;。你可以这样使用它:

foreach (var foundItem in cpulist.FindAll(delegate (Cpu obj) { return !obj.Column.Status("Healthly"); }))
{
  ... 
}

或者您可以使用 Linq Where 方法。
这将在任何实现 IEnumerable 的类型上执行,因此它返回一个 IEnumerable 的实例。

你可以这样使用它。

foreach (var foundItem in cpulist.Where(cpu => !cpu.Status.Equals("Healthy")))
{
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 2012-07-14
    • 2018-01-02
    • 2021-03-31
    • 2015-12-03
    • 1970-01-01
    • 2011-06-02
    • 2022-01-23
    相关资源
    最近更新 更多