检查项目是否不在键值对列表中

check if items are not in a keyvaluepair list

我有一个 List<KeyValuePair<string, bool>> 类型的列表。此列表包含 8 个项目。我还有一个字符串 line。我正在尝试检查 line 是否不包含来自 TKey (字符串)的单词并且 TValue 是否为假。

我没有使用字典,因为 lst 可能包含重复项。

如果 line 不包含任何 TKey 而对应的 TValue 为假,则这应该为真。

看来AnyAll都不符合我的需求:

if (lst.Any(x => !line.Contains(x.Key) && x.Value == false)
{
   // this is always true even if line does contain a TKey.
   // I'm not exactly sure why.
}

if (lst.All(x => !line.Contains(x.Key) && x.Value == false)
{
   // this is always false even if line does not contain a TKey.
   // I think it would only be true if line contained *every* TKey?
}

有办法吗?

一种方法是通过过滤 p.Value 来检查目标 string 中是否缺少 Valuefalse 中的所有单词:

if (list.Where(p => !p.Value).All(w => !line.Contains(x.Key))) {
    ...
}

您还可以修正您的查询:

if (lst.All(x => !line.Contains(x.Key) || x.Value) {
    ...
}

这要求每个 KVP 至少满足以下一项:

  • 行不包含键,或者
  • 值为true

这应该适合你

if (!lst.Any(x => line.Contains(x.Key) && !x.Value))
{
   //line does not contain any TKey where the corresponding TValue is false
}