有没有一种方法可以合并foreach循环

时间:2018-07-28 05:36:34

标签: c#

我有2个列表,如下所示:

valuesToMatch = ["someemail@something.com", "123-45-6789"]
regexValuesToMatchWith = ["^[a-zA-Z0-9._%+-]+@[a-z0-9-]+\.(com|org|edu|)(\.[a-z]{2,3})?", "^\d{3}-\d{2}-\d{4}$"]

我想将带有电子邮件正则表达式的电子邮件与带有SSN正则表达式的SSN编号匹配。如果两者都正确,那么只有我可以添加数据,否则不能添加。

public bool MatchRegex(Data data)
{
    var regexMatch = false;
    var valuesToMatch = GetValuesToMatch(data.values);
    var regexValuesToMatchWith = service.Validations(data.id);
    foreach (var toMatch in valuesToMatch)
    {
        foreach (var withRegex in regexValuesToMatchWith)
        {
            var r = new Regex(withRegex, RegexOptions.IgnoreCase);
            if (r.IsMatch(toMatch))
            {
                regexMatch = true;
            }
        }
    }

    if (regexMatch)
    {
        return dbContext.Add(data);
    }

    return false;
}

我已经在线研究了方法,但是不确定是否可以实现。

1 个答案:

答案 0 :(得分:3)

也许for循环更适合您要实现的目标。

bool regexMatch = true;

for (int i = 0; i < withRegex.Length; i++)
{
        var r = new Regex(valuesToMatch[i], RegexOptions.IgnoreCase);

        if (!r.IsMatch(regexValuesToMatchWith[i]))
        {
            regexMatch = false;
            break;
        }
    }
}

foreach循环将比较每个值与email和SSN regex,这是不必要的。除此之外,如果像您所做的那样将regexMatch设置为true,即使其中一个比较不匹配也将是true。

根据您的示例,我假设valuesToMatchregexValuesToMatchWith的大小始终相同,并且数据顺序正确。