如何从列表中删除重复值但想要包含该列表中的所有空字符串

how to remove duplicate values from a list but want to include all empty strings from that list

我有一个对象列表,我想删除其中的重复项但不想删除空白对象。 我正在使用 DistinctBy lambda 表达式。但它也会删除重复项。 任何人都可以帮助我提供通过空白并仅检查对象中具有适当值的对象的条件吗?

示例:

var list 在这种情况下是一个由所有重复项组成的列表(减去空字符串) 然后我只是遍历重复项并将它们从 listOfValues 中删除。

List<string> listOfValues = new List<string> {"test", "test2", "", "test2", "", ""};
var list = listOfValues.GroupBy(r => r).SelectMany(grp => grp.Skip(1)).Where(r => r != "");
foreach (var aVar in list)
{
    listOfValues.Remove(aVar);
}

您可以使用一个非常简单的扩展方法:

    public static void DistinctKeepingEmptyStrings(this List<string> list) {
        var support = new List<string>(list);
        HashSet<string> knownValues = new HashSet<string>();
        foreach (var aString in list) {
            if (aString == "" || knownValues.Add(aString)) {
                support.Add(aString);
            }
        }
        list.Clear();
        list.AddRange(support);
    }