过滤后的序列在下一次迭代中变为空

时间:2016-06-22 05:50:27

标签: c# sequence

我有IEnumerable对象,我在for循环中多次过滤,如下所示:

IEnumerable<XElement> searchedTypes;
//searchedTypes then loaded with data
for (int counter = 0; counter < 5; counter++)
{
    string index = (counter+1).ToString();
    searchedTypes = searchedTypes.Where(x => Regex.IsMatch("String"+index, x.Attribute("Attribute"+index).Value)
        && Regex.IsMatch("String"+index, x.Attribute("AttributeN"+index).Value));
    if (searchedTypes.Count() == 0)
        break;
}

在第一次迭代结束时,我得到过滤序列(searchingTypes),但是当下一次迭代开始时,序列变为空。如果我遗漏了任何东西,请告诉我。

1 个答案:

答案 0 :(得分:0)

我没有看到你的数据源,所以我只能假设错误在哪里。请尝试以下方法:

IEnumerable<XElement> filter(IEnumerable<XElement> source)
{
    for (int counter = 0; counter < 5; counter++)
    {
        string index = (counter + 1).ToString();

        foreach (var n in source.Where(x =>
            {
                var attr1 = x.Attribute("Attribute" + index);
                var attr2 = x.Attribute("AttributeN" + index);

                if (attr1 == null || attr2 == null)
                    return false;

                return Regex.IsMatch("String" + index, attr1.Value)
                    && Regex.IsMatch("String" + index, attr2.Value);
            }))
        {
            yield return n;
        }
    };
}

使用:

var result = filter(searchedTypes);