如何从另一个列表中存在的结构列表中删除项目

Day*_*yan 0 c# collections duplicate-removal

public struct RegistryApp
{
    public string VendorName;
    public string Name;
    public string Version;
} 
Run Code Online (Sandbox Code Playgroud)

我有两个List<RegistryApp>用于保存Windows框中当前安装的所有应用程序.为什么两个?好吧,我有一个List来保存所有x86应用程序,一个用于保存所有x64应用程序.

List<RegistryApp> x64Apps64List = new List<RegistryApp>();
List<RegistryApp> x64Apps32List = new List<RegistryApp>();
Run Code Online (Sandbox Code Playgroud)

一旦这两个填充了从注册表中检索到的适当数据,我尝试以下操作以确保没有重复项.这种方法很有效,List<string>但没有合作List<RegistryApp>.

List<RegistryApp> ListOfAllAppsInstalled = new List<RegistryApp>();

IEnumerable<RegistryApp> x86Apps = x64Apps32List.Except(x64Apps64List);
IEnumerable<RegistryApp> x64Apps = x64Apps64List.Except(x64Apps32List);

foreach (RegistryApp regitem in x86Apps)
{
    if ((regitem.Name != null) && 
     (regitem.Name.Length > 2) && 
     (regitem.Name != "")) 
    {
        ListOfAllAppsInstalled.Add(regitem);
    }
}

foreach (RegistryApp regitem in x64Apps) 
{
    if ((regitem.Name != null) && 
     (regitem.Name.Length > 2) && 
     (regitem.Name != "")) 
    {
        ListOfAllAppsInstalled.Add(regitem);
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个问题?

Oba*_*ama 5

EDITED

要从另一个List中存在的Structs列表中删除项目,您可以看到Cuong LeHere 提供的解决方案:

/sf/answers/894945621/

通过在List类型上使用Distinct无参数扩展方法,我们可以删除这些重复元素.

然后,我们可以选择调用ToList扩展来获取删除了重复项的实际List.

static void Main()
    {
    // List with duplicate elements.
    List<int> mylist = new List<int>();
    mylist.Add(1);
    mylist.Add(2);
    mylist.Add(3);
    mylist.Add(3);
    mylist.Add(4);
    mylist.Add(4);
    mylist.Add(4);

    foreach (int value in mylist)
    {
        Console.WriteLine("Before: {0}", value);
    }

    // Get distinct elements and convert into a list again.
    List<int> distinct = mylist.Distinct().ToList();

    foreach (int value in distinct)
    {
        Console.WriteLine("After: {0}", value);
    }
    }
Run Code Online (Sandbox Code Playgroud)

如果我的答案解决了您的问题,请单击"接受为解决方案"按钮,这样做可以帮助其他人了解解决方