首页 > 解决方案 > 检查范围对象是否在列表中

问题描述

我在 C# 中创建了 Range 对象列表

private List<Excel.Range> _dataCells = new List<Excel.Range>();

如果当前正在使用以下命令向列表中添加范围:

if (_dataCells.Contains(_excel.Selection) == false)
{
    _dataCells.Add(_excel.Selection);
}

这最终得到一个具有重复值的列表。如何在复杂类型列表上使用 Contains 方法?

标签: c#excel-interop

解决方案


Contains您可以使用该All函数并检查相关属性来确定它是否是现有项目,而不是使用该函数。

if (_dataCells.All(x => x.Selection.Property != _excel.Selection.Property))
{
    _dataCells.Add(_excel.Selection);
}

解决这个问题的另一种方法是实现该Equals功能。有关更多说明,请参见此处。

public class Selection : IEquatable<Selection>
{
    ...

    public override bool Equals(Selection selection)
    {
        return selection != null && this.Property == selection.Property;
    }
}

推荐阅读