Amy Bの答えはあなたに本当に近いと思いますが、そこに値が1つしかない場合、値は削除されません。これは、元のポスターが探していたものだと思います.
要求された項目の単一のインスタンスを、それが最後のインスタンスであっても削除する拡張メソッドを次に示します。これは LINQ Except() 呼び出しを反映していますが、すべてのインスタンスではなく、最初のインスタンスのみを削除します。
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);
}
与えられた:{"one", "two", "three", "three", "three"}
呼び出しのsource.ExceptSingle("three")
結果は{"one", "two", "three", "three"}
与えられた:{"one", "two", "three", "three"}
呼び出しのsource.ExceptSingle("three")
結果は{"one", "two", "three"}
与えられた:{"one", "two", "three"}
呼び出しのsource.ExceptSingle("three")
結果は{"one", "two"}
与えられた:{"one", "two", "three", "three"}
呼び出しのsource.ExceptSingle("four")
結果は{"one", "two", "three", "three"}