Esempio n. 1
0
        public void Add(T item)
        {
            if (item == null)
            {
                return;
            }
            var key = _propertyInfo.GetValue(item);

            lock (_dataList)
            {
                if (_checkRepeatPrimaryKey)
                {
                    var _whereQuery = LinqHelper.InvokeWhereEquals(_dataList.Where(m => m != null).Select(m => m.Data).AsQueryable <T>(), _propertyInfo.Name, key);
                    if (LinqHelper.InvokeAny(_whereQuery))
                    {
                        throw new Exception($"{key} exist");
                    }
                    if (_freeIndex.Count > 0)
                    {
                        _dataList[_freeIndex[0]] = new DataItem <T>(item);
                        _freeIndex.RemoveAt(0);
                    }
                    else
                    {
                        _dataList.Add(new DataItem <T>(item));
                    }
                }
                else
                {
                    //这个判断影响写入性能
                    //if (_dataList.Contains(item))
                    //    throw new Exception($"此对象已经在集合当中,不能重复添加");

                    if (_freeIndex.Count > 0)
                    {
                        _dataList[_freeIndex[0]] = new DataItem <T>(item);
                        _freeIndex.RemoveAt(0);
                    }
                    else
                    {
                        _dataList.Add(new DataItem <T>(item));
                    }
                }

                _storageQueue.Add(item);
            }
        }