我有一个可能的字符串列表:
ListOfPossibleStrings
ListOfScenario1Strings
ListOfScenario2Strings
我可以选择ListOfPossibleStrings中任何项目的组合来添加到另一个列表..让我们称之为ListOfSelectedStrings。
但是,我需要根据ListOfSelectedStrings中的whats在这些场景中调用不同的函数
情景1
如果ListOfSelectedStrings只包含ListOfScenario1Strings中的任何字符串 - 调用函数HidePage();
场景2
如果ListOfSelectedStrings只包含ListOfScenario2Strings中的任何字符串 - 调用函数ShowPageConditional();
场景3
如果ListOfSelectedStrings包含来自ListOfScenario1Strings和ListOfScenario2Strings的任何字符串的组合)和/或包含String1,String5,String6调用函数ShowPageMandatory();
我想到了一些东西,比如这可能适用于方案1但是它'可以'包含任何其他字符串,因为它不排除其他字符串。
if (ListOfSelectedStrings.Any(x => ListOfScenario1Strings.Any(y => y.StringValue == x)))
{
HidePage();
}
答案 0 :(得分:1)
我会制作3个列表
的List1 列表2 项目list3
bool anyList1 = ListOfSelectedStrings.Any(x => List1.Any(y => y.StringValue == x));
bool anyList2 = ListOfSelectedStrings.Any(x => List2.Any(y => y.StringValue == x));
bool anyList3 = ListOfSelectedStrings.Any(x => List3.Any(y => y.StringValue == x));
然后处理逻辑
if(anyList3) ShowPageMandatory();
else if (anyList1 && anyList2) ShowPageMandatory();
else if (anyList1 && !anyList2 && !anyList3) HidePage();
else if (anyList2 && !anyList1 && !anyList3) ShowPageConditional();
考虑HashSet
它有子集,超集和重叠
答案 1 :(得分:0)
您可以使用LINQ Except
方法获取您正在寻找的结果。
Except
时,结果是第一个列表中的所有内容第二个列表中的内容Any
会告诉您结果中有内容,因此第一个列表中的某些内容不在第二个列表中这些应该可以为您的三种情景提供正确的结果:
if (!ListOfPossibleStrings.Except(ListOfScenario1Strings).Any())
HidePage();
if (!ListOfPossibleStrings.Except(ListOfScenario2Strings).Any())
ShowPageConditional();
if (!ListOfSelectedStrings.Except(
ListOfScenario1Strings.Union(
ListOfScenario2Strings.Union(
new List<string> { "String1", "String5", "String6" }))).Any())
{
ShowPageMandatory();
}