我有一个名为Country的班级.它有公共成员,'CountryName'和'States'.
我已经宣布了一份国家名单.
现在我想写一个函数接受一个新的'Country'并决定CountryList是否已经有'Country'.
我试着写一个像这样的函数
bool CheckCountry(Country c)
{
return CountryList.Exists(p => p.CountryName == c.Name
&& p.States.SequenceEqual(c.States));
}
Run Code Online (Sandbox Code Playgroud)
由于我想使用States的CountryName属性比较状态,我想修改我的函数,以便SequenceEqual基于状态的CountryName工作?
Eri*_*ert 12
将其分解为许多简单查询,然后将这些查询重新组合在一起.
让我们从一系列按名称匹配的项目开始:
var nameMatches = from item in itemList where item.Name == p.Name select item;
Run Code Online (Sandbox Code Playgroud)
我们需要将这些项与p的子项中的名称序列进行比较.这是什么序列? 写一个查询:
var pnames = from subitem in p.SubItems select subitem.Name;
Run Code Online (Sandbox Code Playgroud)
现在,您要查找nameMatches中名称序列匹配的所有元素.你怎么得到名字的序列?好吧,我们刚看到如何使用pnames,所以做同样的事情:
var matches = from item in nameMatches
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where pnames.SequenceEqual(subitemNames)
select item;
Run Code Online (Sandbox Code Playgroud)
现在你想知道,有没有比赛?
return matches.Any();
Run Code Online (Sandbox Code Playgroud)
这应该工作得很好.但是如果你想成为真正的buff,你可以在一个大问题中写下整个事情!
return (
from item in itemList
let pnames =
(from psubitem in p.SubItems select psubitem.Name)
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where item.Name == p.Name
where pnames.SequenceEqual(subitemNames)
select item).Any();
Run Code Online (Sandbox Code Playgroud)
而且你已经完成了.非常简单!请记住,将其分解为小步骤,单独解决每个问题,然后将解决方案放在小结果之外.
| 归档时间: |
|
| 查看次数: |
3826 次 |
| 最近记录: |