沿着这些方向不会有任何内置的东西,但如果你经常需要它,你可以推出一些定制但相当通用的东西:
static IEnumerable WhereRepeated(
this IEnumerable source)
{
return WhereRepeated(source,x => x);
}
static IEnumerable WhereRepeated(
this IEnumerable source,Func selector)
{
using (var iter = source.GetEnumerator())
{
if (iter.MoveNext())
{
var comparer = EqualityComparer.Default;
TValue lastValue = selector(iter.Current);
while (iter.MoveNext())
{
TValue currentValue = selector(iter.Current);
if (comparer.Equals(lastValue,currentValue))
{
yield return iter.Current;
}
lastValue = currentValue;
}
}
}
}
用法:
foreach (Value value in values.WhereRepeated(x => x.Name))
{
Console.WriteLine(value.Name);
}
您可能想要考虑如何处理三元组等 – 目前除了第一个之外的所有内容都将被生成(与您的描述相符),但这可能不太正确.