1

这里会详细解释:我有

public class Season
    {
        #region Public Variables

        private int _id;
        private string _seasonName;
        private int _startMonth;

        #endregion

        #region Public Properties 

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public int StartMonth
        {
            get { return _startMonth; }
            set { _startMonth = value; }
        }

        public string SeasonName
        {
            get { return _seasonName; }
            set { _seasonName = value; }
        }

        #endregion

        #region Public Constructor

        public Season()
        {
            this._initialize();
        }

        public Season(string pSeasonName, int _pStartMonth,int pID)
        {
            this._initialize(pSeasonName, _pStartMonth, pID);
        }

        #endregion

    }

接下来我有如下所示

IList<Season> seaosns = new List<Season>();
seaosns.Add(new Season("Summer", 4, 1));
seaosns.Add(new Season("Winter", 6, 2));
seaosns.Add(new Season("MidSummer", 10, 1));

在这里我需要检查 Ilist 项目中是否重复 Id。这可以通过使用 For 循环来完成,但需要知道是否有其他解决方案。

提前致谢。

4

4 回答 4

4

使用HashSet而不是列表!集合是不包含重复元素且其元素没有特定顺序的集合。您可以提供自定义 IEqualityComparer 来确定您的季节的唯一性。

var seaosns = new HashSet<Season>(seasonsEqualityComparer);
seaosns.Add(new Season("Summer", 4, 1));
seaosns.Add(new Season("Winter", 6, 2));
seaosns.Add(new Season("MidSummer", 10, 1)); // returns false...
于 2012-05-30T06:44:36.443 回答
4

最合适的方法是将项目(替代或附加)存储在 a 中Dictionary<int,Season>,使用唯一属性 ( Id) 作为字典中的键。然后,您可以进行O(1)查找以测试存在性并通过键 ( Id) 获取。但是请注意,字典没有排序- 意思是,它不保证尊重插入顺序或键顺序。订单未定义- 因此,如果您以特定顺序需要它们,您可能需要单独持有。

于 2012-05-30T06:44:39.650 回答
3

您可以使用 anIDictionary而不是IList,然后不允许重复键。您可以Season.Id用作密钥。使用 aLookup将允许您复制元素,因此您可以迭代键并检查与其关联的元素数量。

于 2012-05-30T06:46:41.820 回答
0

如果你只是想检查,试试这个:

var hasDuplicates = list.GroupBy(season => season.Id).Any(groupping => groupping.Count() > 1);  

但是,如果您想获取集合,即最初没有重复项,请使用 HashSet 或 Dictionary,正如其他人所说,或者从不允许添加重复项的 Collection 中创建子类。

于 2012-05-30T06:51:59.683 回答