我认为Amy B S回答得到你非常接近的答案, 但是它不会去除在只有一个价值的情况下的价值, 我认为原始海报是在找这个价值的。
这里的扩展方法将删除请求项目的一个实例,即使这是最后一个实例。这反映了 LINQ 例外 () 调用, 但只删除了第一个实例, 不是所有实例 。
public static IEnumerable<T> ExceptSingle<T>(this IEnumerable<T> source, T valueToRemove)
{
return source
.GroupBy(s => s)
.SelectMany(g => g.Key.Equals(valueToRemove) ? g.Skip(1) : g);
}
Given: {"one", "two", "three", "three", "three"}
The call source.ExceptSingle("three")
results in {"one", "two", "three", "three"}
Given: {"one", "two", "three", "three"}
The call source.ExceptSingle("three")
results in {"one", "two", "three"}
Given: {"one", "two", "three"}
The call source.ExceptSingle("three")
results in {"one", "two"}
Given: {"one", "two", "three", "three"}
The call source.ExceptSingle("four")
results in {"one", "two", "three", "three"}