gpt4 book ai didi

c# - 尝试确定两个 List 中的公共(public)元素时出现问题

转载 作者:行者123 更新时间:2023-12-02 05:41:07 24 4
gpt4 key购买 nike

我有一门课,叫做ClassX出于这个问题的目的,声明如下:

class X 
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}

如果我有 instanceOne 的两个实例( instanceTwoList<T> )在这些类中,如何找到两个实例中相同的元素:

假设instanceOne中有两个元素,instanceTwo中有四个元素。在每个实例中,有两个元素是相同的(根据它们具有相同 Guid Id 的事实定义)

我认为我应该能够通过 LINQ 实现它,但这并不适合我

// What's common to the two instances?
var commonElements = (
from a in instanceTwo
join b in instanceOne on a.Id equals b.Id
select b).ToList();

// What's not in instanceOne and in instanceTwo?
var notInInstanceOne = instanceTwo.Except(commonElements)

在这种情况下 instanceTwoinstanceOne 的超集但情况可能并非总是如此,所以我应该能够翻转原始的 LINQ 语句来获取 instanceOne 中的元素。不在 instanceTwo 中即:

var notInInstanceTwo = instanceOne.Except(commonElements)

令人沮丧的是,原始的 LINQ 语句(我试图确定公共(public)元素的地方)不起作用,有人能发现我做错了什么吗?

编辑 2012-06-08 11:00 UTC

根据@Nikhil Agrawal 和@Trust me - 我是一名医生,我使用了 Intersect 方法,但这并没有产生预期的结果:

    var commonItems = instanceTwo.Intersect(instanceOne); // Returns nothing
var itemsInTwoNotOne= instanceTwo.Except(instanceOne); // Returns everything in instanceTwo

FWIW 我对 Equals() 方法的实现是:

public bool Equals(Guid x, Guid y)
{
if (x == y)
{
return true;
}
return false;
}

最佳答案

如果 Except 有效,则

var commonItems = instanceOne.Intersect(instanceTwo);

应该也可以。 :)

旁注,它会比较引用,所以如果你想要不同的功能,你必须实现你自己的 IEqualityComparer - 但同样适用于 Except .

关于c# - 尝试确定两个 List<T> 中的公共(public)元素时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10946914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com