【问题标题】:Simplifying a foreach and Any() with only Linq仅使用 Linq 简化 foreach 和 Any()
【发布时间】:2018-02-08 11:51:04
【问题描述】:

我想重写这段代码只使用 Linq:

foreach (string dog in dogs)
{
    Assert.That(GetOwnersForDog(dog).Any(x => x.Name == "Me"));
}

它会告诉所有的狗是否至少有一个叫“我”的主人。 有什么想法吗?

【问题讨论】:

  • 你想删除什么? foreach ?
  • 您使用的是哪个单元测试框架?它有集合的断言吗? xUnit 有一个Assert.All,NUnit 有一个Collection constraints
  • 我正在使用 Nunit。

标签: c# linq foreach


【解决方案1】:

我不认为添加 LINQ 会“简化”任何事情,但是:

Assert.That(dogs.All(dog => GetOwnersForDog(dog).Any(x => x.Name == "Me")));

就个人而言,我更喜欢原始代码。

【讨论】:

  • 谢谢!我对原版没有任何问题,我只是好奇如何做到这一点。谢谢!
  • 主要支持两种自然语言陈述。
【解决方案2】:

假设您在DogOwner 之间有关系

public class Dog
{
    public List<Owner> Owners { get; set; }
    ...
}

您可以执行以下操作

检查Anydog 是否指定了Owner

var found = Dogs.All(dog => dog.Owners.Any(owner => owner.Name = "Me")):

或者检查Alldogs是否指定了Owner

var found = Dogs.Any(dog  => dog.Owners.Any(owner => owner.Name = "Me")):

或者,如果您想使用Where 获取指定Owner 的狗列表

var dogs = Dogs.Where(dog  => dog.Owners.Any(owner => owner.Name = "Me")):

【讨论】:

  • 谢谢!很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
相关资源
最近更新 更多