检查项目是否不在键值对列表中
check if items are not in a keyvaluepair list
我有一个 List<KeyValuePair<string, bool>>
类型的列表。此列表包含 8 个项目。我还有一个字符串 line
。我正在尝试检查 line
是否不包含来自 TKey
(字符串)的单词并且 TValue
是否为假。
我没有使用字典,因为 lst
可能包含重复项。
如果 line
不包含任何 TKey
而对应的 TValue
为假,则这应该为真。
看来Any
和All
都不符合我的需求:
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
中是否缺少 Value
或 false
中的所有单词:
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
}
我有一个 List<KeyValuePair<string, bool>>
类型的列表。此列表包含 8 个项目。我还有一个字符串 line
。我正在尝试检查 line
是否不包含来自 TKey
(字符串)的单词并且 TValue
是否为假。
我没有使用字典,因为 lst
可能包含重复项。
如果 line
不包含任何 TKey
而对应的 TValue
为假,则这应该为真。
看来Any
和All
都不符合我的需求:
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
中是否缺少 Value
或 false
中的所有单词:
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
}