在这里,我如何使用if语句与string.Contains()?

时间:2017-05-29 11:03:11

标签: c#

如果不存在,我要使用每个元素来验证数组。但是,如果不包含'不按预期工作。请查看下面的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*/
}

4 个答案:

答案 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);
}

这样可以更轻松地进行调试,并帮助您确定您的情况是否错误或者是否有其他事情在欺骗您。

我知道这不会解决问题,但它可以帮助你确定原因。