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); } }