c# - 自定义包含 List<ReferenceObject> c#

标签 c# list reference contains iequatable

我正在尝试在列表中使用 List.Contains 我要比较的对象来自 C# 中的服务引用,它们的 Equals 方法不适合我的需要。

我一直在研究 IEquatables 或如何在我“给定”的对象中覆盖我的 Equals 方法,但我似乎无法为此找到解决方案。 有人知道一种有效的方法吗?

public void FilterNonExisting(List<ActivitiesActivity> commitActivitiesList)
    {
        // ActivitiesActivity is the object I'm given through a reference
        List<int> itemsToDelete = new List<int>();
        int commitCount = 0;

        foreach (ActivitiesActivity commitItem in commitActivitiesList)
        {
            if (this.logList.Contains(commitItem)) // this is the part that doesn't work the way I want it to                {
                itemsToDelete.Add(commitCount);
            }
            commitCount++;
        }
        itemsToDelete.Reverse();
        foreach (int item in itemsToDelete)
            commitActivitiesList.RemoveAt(item);
        if (commitActivitiesList.Count == 0)
        {
            throw new AllCommitedException("All lines had already been committed");
        }

最佳答案

听起来你只想实现 IEqualityComparer<ActivitiesActivity> :

public class ActivitiesActivityEqualityComparer
    : IEqualityComparer<ActivitiesActivity>
{
    public bool Equals(ActivitiesActivity x, ActivitiesActivity y)
    {
        ...
    }

    public int GetHashCode(ActivitiesActivity activity)
    {
        ...
    }
}

然后:

// Reuse this for multiple calls
var equalityComparer = new ActivitiesActivityEqualityComparer();
...
if (this.logList.Contains(commitItem, equalityComparer))

创建相等比较器后,您可以将其用于各种用途,例如以事件为键的字典、LINQ 操作(如 Distinct)和 Join

关于c# - 自定义包含 List<ReferenceObject> c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146416/

相关文章:

java - 如何在整个类中使用对象引用

c# - 由于 commandTimeout 不够健壮,如何使用 Dapper 在 C# 中获得可靠的阻塞/缓慢数据库操作超时?

c# - 框架手势识别器在ios模拟器Xamarin中不起作用

c# - 如何捕捉 Alt + Tab

c# - 使用动态基地址 retrofit 客户端

python - 合并列表字典中具有相同值的键

list - 从 Prolog 中的一个列表捕获值并添加到另一个列表

java - 如何在 Java 中使用 Comparables 创建自定义参数化列表对象?

c++ - 返回无效或引用 self ?

java - 在 Java 中复制对象