如果不存在,我要使用每个元素来验证数组。但是,如果不包含'不按预期工作。请查看下面的gif图像。我该如何正确验证?
var PartnerTypeName =
pageVm
.Form1
.PartnerTypeName
.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries)
.Distinct();
if ((PartnerTypeName.Any("PSUD".Contains)
|| PartnerTypeName.Any("PDST".Contains)
|| PartnerTypeName.Any("PDLR".Contains))
&& (!PartnerTypeName.Any("SERP".Contains)
|| !PartnerTypeName.Any("Contractors".Contains)))
{
/*here the logic*/
}
答案 0 :(得分:2)
PartnerTypeName.Any("PSUD".Contains)
行可能没有按照您的预期行事。在此代码段中,您将字符串实例Contains
的{{1}}方法作为谓词传递给"PSUD"
方法。
这意味着数组中的每个字符串都将传递给该特定字符串的包含。在这种情况下,如果数组包含例如Any
或"U"
,则Any将为true。当然我可能会弄错,这是故意行为。
但这不是逻辑不起作用的主要原因。这是因为最后"SU"
应为!SERP || !Contracters
。也就是说,假设您不希望评估为真,如果其中任何一个在数组中。通过说&&
,两个值都必须在数组中,以使if evaluate为true。
总而言之,看到数组的内容,我个人会使用HashSet(假设你想要完全匹配)。这将创建“不同”值并创建一个易于使用的集合来检查值是否存在。伪代码:
! || !
答案 1 :(得分:0)
你需要检查你正在使用的if语句!不在右边
所以它应该是&&不是||
你正在做的是,如果其中一个不在列表中,它会通过,但我认为你需要它们不在列表中
答案 2 :(得分:0)
这应该可行,它尝试本地包含将工作。 确保您的条件适合您的情况。
List<string> myObjects = new List<string>();
myObjects.Add("SERP");
myObjects.Add("PSUD");
if (!myObjects.Contains("SERP"))
{
}
else
{
}
答案 3 :(得分:0)
考虑将此解压缩到方法并为不同的方案添加单元测试,例如
public bool IsSomeType(string[] partnerTypeNames)
{
if ((NameOfYourPositiveCase(partnerTypeNames)
&& (NameOfYourNegativeCase(partnerTypeNames))
{
/*here the logic*/
}
}
public bool NameOfYourPositiveCase(string[] partnerTypeNames) {
return ((partnerTypeNames.Any("PSUD".Contains)
|| partnerTypeNames.Any("PDST".Contains)
|| partnerTypeNames.Any("PDLR".Contains));
}
public bool NameOfYourNegativeCase(string[] partnerTypeNames) {
return !partnerTypeNames.Any("SERP".Contains)
|| !partnerTypeNames.Any("Contractors".Contains);
}
这样可以更轻松地进行调试,并帮助您确定您的情况是否错误或者是否有其他事情在欺骗您。
我知道这不会解决问题,但它可以帮助你确定原因。